很多时候,我们需要做一个多语言的站点,cosbeta认为目前多语言网站的解决方案比较多,比如:
做几个不同的分站,通过用户第一次的选择将用户定位到相应语言的分站;
编辑网站内容的时候,添加多种语言,然后通过用户的选择从数据库中获取对应的语言;
添加一个google翻译按钮,用户自行选择google翻译查看不同语言的版本;
利用google 翻译接口,通过js实时翻译网页文字,cosbeta今天打算要介绍的就是这种方法;
上面4种方法的优缺点我这里就不多描述了,相信大家都很清楚了。应客户的要求,再加上翻译方便和翻译的通用性的需求,cosbeta决定用第4种方法为客户解决多语言的问题。
最开始cosbeta的解决办法是想通过程序模拟客户端去直接读取google对当前页面翻译的内容,从而实现页面的多语言版本。比如用户访问http://storyday.com?p=1,当用户需要访问日语版时,cosbeta就将此页面通过php发送给google的网页翻译接口,然后将翻译的结果读取出来,显示在当前的页面上。然而后来cosbeta发现这种方式是不可取的,一方面google对客户端的限制比较严格,用php模拟客户端可能会导致数据获取的失败,另外一方面,google并没有推荐这种方式,所以很容易导致翻译失效。
做几个不同的分站,通过用户第一次的选择将用户定位到相应语言的分站;
编辑网站内容的时候,添加多种语言,然后通过用户的选择从数据库中获取对应的语言;
添加一个google翻译按钮,用户自行选择google翻译查看不同语言的版本;
利用google 翻译接口,通过js实时翻译网页文字,cosbeta今天打算要介绍的就是这种方法;
上面4种方法的优缺点我这里就不多描述了,相信大家都很清楚了。应客户的要求,再加上翻译方便和翻译的通用性的需求,cosbeta决定用第4种方法为客户解决多语言的问题。
最开始cosbeta的解决办法是想通过程序模拟客户端去直接读取google对当前页面翻译的内容,从而实现页面的多语言版本。比如用户访问http://storyday.com?p=1,当用户需要访问日语版时,cosbeta就将此页面通过php发送给google的网页翻译接口,然后将翻译的结果读取出来,显示在当前的页面上。然而后来cosbeta发现这种方式是不可取的,一方面google对客户端的限制比较严格,用php模拟客户端可能会导致数据获取的失败,另外一方面,google并没有推荐这种方式,所以很容易导致翻译失效。
通过ucenter可以实现应用程序之间同步登陆,同步退出。好多人都实现了单向同步登陆,却没有实现双向的同步登陆,即就是通过应用程序登陆后,可以同步登陆到discuz论坛等程序,却不能实现登陆论坛以后同步登陆应用程序。这是因为没有彻底理解ucenter的工作模式,仅仅照着官方的例子来做的,而官方的例子向来被人们所诟病,问题太多,BUG也不少。ucenter的登陆采取的是p3p的模式,也有人质疑这种模式,说是站点多了能够拖慢速度,但是对于大部分用户来说已经足够用了,同时也为站点整合提供了一个很好的途径。
下面说说双向登陆:
应用程序登陆后用uc_user_synlogin(客户端client.php程序里的)函数通知ucenter同时建立相应的cookie等,然后ucenter通知各个应用程序uc.php里的'synlogin'的$action,实现其他应用程序的登陆。同理如果做应用程序的反向登陆的话,也需要修改本身的uc.php的synlogin,建立自己的登陆验证。
因为项目的需要,将ecshop2.6,discuz7,以及外部的自制页面应用全部整合到一个站内,要求以上所有位置登录一处,全站通行;一处退出,各处都退出;一处注册,全站有效。
实现这个目的,非Ucenter莫属了,于是下载Ucenter的最新版本1.5进行安装,然后在应用管理中逐个的添加ecshop2.6和discuz7.
以上通信全部成功,可实现ecshop和discuz中,同步登陆和同步退出。
注意到Ucenter1.5的文档里,自带一个examples(范例程序),和我所需要的外部登录页面功能恰好吻合,于是先拿这个范例程序开刀。
调试中发现按照文档里的说明进行设置,无论如何,在ucenter的应用管理里也不能通信成功;
于是进度卡在这里,其实我想告诉同样遇到这个问题的朋友,不必拘泥于非要看到“通信成功”这四个字,其实这里并不是问题的关键。
在example的config.inc.php中,缺少了一个变量:$database = ‘mysql’,这个变量在ucenter的客户端一会要用到,所以需要把这个变量填写进去;
然后,在应用管理->你自己的应用->应用的物理路径填进去,注意这里只要填相对于uc的相对路径就可以,ucenter一会会自动转换为绝对路径;
做完上面的两个步骤,你就可以看到通讯成功了。
实现这个目的,非Ucenter莫属了,于是下载Ucenter的最新版本1.5进行安装,然后在应用管理中逐个的添加ecshop2.6和discuz7.
以上通信全部成功,可实现ecshop和discuz中,同步登陆和同步退出。
注意到Ucenter1.5的文档里,自带一个examples(范例程序),和我所需要的外部登录页面功能恰好吻合,于是先拿这个范例程序开刀。
调试中发现按照文档里的说明进行设置,无论如何,在ucenter的应用管理里也不能通信成功;
于是进度卡在这里,其实我想告诉同样遇到这个问题的朋友,不必拘泥于非要看到“通信成功”这四个字,其实这里并不是问题的关键。
在example的config.inc.php中,缺少了一个变量:$database = ‘mysql’,这个变量在ucenter的客户端一会要用到,所以需要把这个变量填写进去;
然后,在应用管理->你自己的应用->应用的物理路径填进去,注意这里只要填相对于uc的相对路径就可以,ucenter一会会自动转换为绝对路径;
做完上面的两个步骤,你就可以看到通讯成功了。
预定义变量(一) $_SERVER (附:获取当前URL地址例子)
例: 我需要 获取当前的 的URL 地址
$url_this = "http://".$_SERVER ['HTTP_HOST'].$_SERVER['PHP_SELF'];
echo $url_this;
则显示 : http://localhost/lu.php
服务器变量:$_SERVER
注: 在 PHP 4.1.0 及以后版本使用。之前的版本,使用 $HTTP_SERVER_VARS。
$_SERVER 是一个包含诸如头部(headers)、路径(paths)和脚本位置(script locations)的数组。数组的实体由 web 服务器创建。不能保证所有的服务器都能产生所有的信息;服务器可能忽略了一些信息,或者产生了一些未在下面列出的新的信息。这意味着,大量的这些变量在 CGI 1.1 specification 中说明,所以您应该仔细研究它。
这是一个“superglobal”,或者可以描述为自动全局变量。这只不过意味这它在所有的脚本中都有效。在函数或方法中您不需要使用 global $_SERVER; 访问它,就如同使用 $HTTP_SERVER_VARS 一样。
$HTTP_SERVER_VARS 包含着同样的信息,但是不是一个自动全局变量。(注意: $HTTP_SERVER_VARS 和 $_SERVER 是不同的变量,PHP 处理它们的方式不同。)
如果设置了 register_globals 指令,这些变量也在所有脚本中可用;也就是,分离了 $_SERVER 和 $HTTP_SERVER_VARS 数组。相关信息,请参阅安全的相关章节 使用 Register Globals。这些单独的全局变量不是自动全局变量。
您或许会发现下面列出的某些 $_SERVER 元素并不可用。注意,如果以命令行方式运行 PHP,下面列出的元素几乎没有有效的(或是没有任何实际意义的)。
“PHP_SELF”
当前正在执行脚本的文件名,与 document root相关。举例来说,在URL地址为 http://example.com/test.php/foo.bar 的脚本中使用 $_SERVER['PHP_SELF'] 将会得到 /test.php/foo.bar 这个结果。
如果 PHP 以命令行方式运行,该变量无效。
“argv”
传递给该脚本的参数。当脚本运行在命令行方式时,argv 变量传递给程序 C 语言样式的命令行参数。当调用 GET 方法时,该变量包含请求的数据。
“argc”
包含传递给程序的命令行参数的个数(如果运行在命令行模式)。
“GATEWAY_INTERFACE”
服务器使用的 CGI 规范的版本。例如,“CGI/1.1”。
'SERVER_NAME'
当前运行脚本所在服务器主机的名称。如果该脚本运行在一个虚拟主机上,该名称是由那个虚拟主机所设置的值决定。
'SERVER_SOFTWARE'
服务器标识的字串,在响应请求时的头部中给出。
“SERVER_PROTOCOL”
请求页面时通信协议的名称和版本。例如,“HTTP/1.0”。
“REQUEST_METHOD”
访问页面时的请求方法。例如:“GET”、“HEAD”,“POST”,“PUT”。
“QUERY_STRING”
查询(query)的字符串。
“DOCUMENT_ROOT”
当前运行脚本所在的文档根目录。在服务器配置文件中定义。
“HTTP_ACCEPT”
当前请求的 Accept: 头部的内容。
“HTTP_ACCEPT_CHARSET”
当前请求的 Accept-Charset: 头部的内容。例如:“iso-8859-1,*,utf-8”。
“HTTP_ACCEPT_ENCODING”
当前请求的 Accept-Encoding: 头部的内容。例如:“gzip”。
“HTTP_ACCEPT_LANGUAGE”
当前请求的 Accept-Language: 头部的内容。例如:“en”。
“HTTP_CONNECTION”
当前请求的 Connection: 头部的内容。例如:“Keep-Alive”。
“HTTP_HOST”
当前请求的 Host: 头部的内容。
“HTTP_REFERER”
链接到当前页面的前一页面的 URL 地址。不是所有的用户代理(浏览器)都会设置这个变量,而且有的还可以手工修改 HTTP_REFERER。因此,这个变量不总是正确真实的。
“HTTP_USER_AGENT”
当前请求的 User_Agent: 头部的内容。该字符串表明了访问该页面的用户代理的信息。一个典型的例子是:Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586)。您也可以使用 get_browser() 得到这个信息。
“REMOTE_ADDR”
正在浏览当前页面用户的 IP 地址。
'REMOTE_HOST'
正在浏览当前页面用户的主机名。反向域名解析基于该用户的 REMOTE_ADDR。
注: 必须配置 Web 服务器来建立此变量。例如 Apache 需要在 httpd.conf 中有 HostnameLookups On。参见 gethostbyaddr()。
“REMOTE_PORT”
用户连接到服务器时所使用的端口。
“SCRIPT_FILENAME”
当前执行脚本的绝对路径名。
“SERVER_ADMIN”
该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。如果脚本运行在一个虚拟主机上,则该值是那个虚拟主机的值。
“SERVER_PORT”
服务器所使用的端口。默认为“80”。如果你使用 SSL 安全连接,则这个值为您所设置的 HTTP 端口。
“SERVER_SIGNATURE”
包含服务器版本和虚拟主机名的字符串。
“PATH_TRANSLATED”
当前脚本所在文件系统(不是文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果。
“SCRIPT_NAME”
包含当前脚本的路径。这在页面需要指向自己时非常有用。
“REQUEST_URI”
访问此页面所需的 URI。例如,“/index.html”。
“PHP_AUTH_USER”
当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名。
“PHP_AUTH_PW”
当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码。
“AUTH_TYPE”
当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型。
例: 我需要 获取当前的 的URL 地址
$url_this = "http://".$_SERVER ['HTTP_HOST'].$_SERVER['PHP_SELF'];
echo $url_this;
则显示 : http://localhost/lu.php
服务器变量:$_SERVER
注: 在 PHP 4.1.0 及以后版本使用。之前的版本,使用 $HTTP_SERVER_VARS。
$_SERVER 是一个包含诸如头部(headers)、路径(paths)和脚本位置(script locations)的数组。数组的实体由 web 服务器创建。不能保证所有的服务器都能产生所有的信息;服务器可能忽略了一些信息,或者产生了一些未在下面列出的新的信息。这意味着,大量的这些变量在 CGI 1.1 specification 中说明,所以您应该仔细研究它。
这是一个“superglobal”,或者可以描述为自动全局变量。这只不过意味这它在所有的脚本中都有效。在函数或方法中您不需要使用 global $_SERVER; 访问它,就如同使用 $HTTP_SERVER_VARS 一样。
$HTTP_SERVER_VARS 包含着同样的信息,但是不是一个自动全局变量。(注意: $HTTP_SERVER_VARS 和 $_SERVER 是不同的变量,PHP 处理它们的方式不同。)
如果设置了 register_globals 指令,这些变量也在所有脚本中可用;也就是,分离了 $_SERVER 和 $HTTP_SERVER_VARS 数组。相关信息,请参阅安全的相关章节 使用 Register Globals。这些单独的全局变量不是自动全局变量。
您或许会发现下面列出的某些 $_SERVER 元素并不可用。注意,如果以命令行方式运行 PHP,下面列出的元素几乎没有有效的(或是没有任何实际意义的)。
“PHP_SELF”
当前正在执行脚本的文件名,与 document root相关。举例来说,在URL地址为 http://example.com/test.php/foo.bar 的脚本中使用 $_SERVER['PHP_SELF'] 将会得到 /test.php/foo.bar 这个结果。
如果 PHP 以命令行方式运行,该变量无效。
“argv”
传递给该脚本的参数。当脚本运行在命令行方式时,argv 变量传递给程序 C 语言样式的命令行参数。当调用 GET 方法时,该变量包含请求的数据。
“argc”
包含传递给程序的命令行参数的个数(如果运行在命令行模式)。
“GATEWAY_INTERFACE”
服务器使用的 CGI 规范的版本。例如,“CGI/1.1”。
'SERVER_NAME'
当前运行脚本所在服务器主机的名称。如果该脚本运行在一个虚拟主机上,该名称是由那个虚拟主机所设置的值决定。
'SERVER_SOFTWARE'
服务器标识的字串,在响应请求时的头部中给出。
“SERVER_PROTOCOL”
请求页面时通信协议的名称和版本。例如,“HTTP/1.0”。
“REQUEST_METHOD”
访问页面时的请求方法。例如:“GET”、“HEAD”,“POST”,“PUT”。
“QUERY_STRING”
查询(query)的字符串。
“DOCUMENT_ROOT”
当前运行脚本所在的文档根目录。在服务器配置文件中定义。
“HTTP_ACCEPT”
当前请求的 Accept: 头部的内容。
“HTTP_ACCEPT_CHARSET”
当前请求的 Accept-Charset: 头部的内容。例如:“iso-8859-1,*,utf-8”。
“HTTP_ACCEPT_ENCODING”
当前请求的 Accept-Encoding: 头部的内容。例如:“gzip”。
“HTTP_ACCEPT_LANGUAGE”
当前请求的 Accept-Language: 头部的内容。例如:“en”。
“HTTP_CONNECTION”
当前请求的 Connection: 头部的内容。例如:“Keep-Alive”。
“HTTP_HOST”
当前请求的 Host: 头部的内容。
“HTTP_REFERER”
链接到当前页面的前一页面的 URL 地址。不是所有的用户代理(浏览器)都会设置这个变量,而且有的还可以手工修改 HTTP_REFERER。因此,这个变量不总是正确真实的。
“HTTP_USER_AGENT”
当前请求的 User_Agent: 头部的内容。该字符串表明了访问该页面的用户代理的信息。一个典型的例子是:Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586)。您也可以使用 get_browser() 得到这个信息。
“REMOTE_ADDR”
正在浏览当前页面用户的 IP 地址。
'REMOTE_HOST'
正在浏览当前页面用户的主机名。反向域名解析基于该用户的 REMOTE_ADDR。
注: 必须配置 Web 服务器来建立此变量。例如 Apache 需要在 httpd.conf 中有 HostnameLookups On。参见 gethostbyaddr()。
“REMOTE_PORT”
用户连接到服务器时所使用的端口。
“SCRIPT_FILENAME”
当前执行脚本的绝对路径名。
“SERVER_ADMIN”
该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。如果脚本运行在一个虚拟主机上,则该值是那个虚拟主机的值。
“SERVER_PORT”
服务器所使用的端口。默认为“80”。如果你使用 SSL 安全连接,则这个值为您所设置的 HTTP 端口。
“SERVER_SIGNATURE”
包含服务器版本和虚拟主机名的字符串。
“PATH_TRANSLATED”
当前脚本所在文件系统(不是文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果。
“SCRIPT_NAME”
包含当前脚本的路径。这在页面需要指向自己时非常有用。
“REQUEST_URI”
访问此页面所需的 URI。例如,“/index.html”。
“PHP_AUTH_USER”
当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名。
“PHP_AUTH_PW”
当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码。
“AUTH_TYPE”
当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型。
scandir
(PHP 5)
scandir -- 列出指定路径中的文件和目录
说明
array scandir ( string directory [, int sorting_order])
返回一个 array,包含有 directory 中的文件和目录。如果 directory 不是一个目录,则返回布尔值 FALSE,并产生一条 E_WARNING 级别的错误。
默认情况下,返回值是按照字母顺序升序排列的。如果使用了可选参数 sorting_order(设为 1),则按照字母顺序降序排列。
例子 1. 简单的 scandir() 例子
<?php
$dir = '/tmp';
$files1 = scandir($dir);
$files2 = scandir($dir, 1);
print_r($files1);
print_r($files2);
/* Outputs something like:
Array
(
[0] => .
[1] => ..
[2] => bar.php
[3] => foo.txt
[4] => somedir
)
Array
(
[0] => somedir
[1] => foo.txt
[2] => bar.php
[3] => ..
[4] => .
)
*/
?>
例子 2. scandir() 在 PHP 4 中的实现
<?php
$dir = "/tmp";
$dh = opendir($dir);
while (false !== ($filename = readdir($dh))) {
$files[] = $filename;
}
sort($files);
print_r($files);
rsort($files);
print_r($files);
/* Outputs something like:
Array
(
[0] => .
[1] => ..
[2] => bar.php
[3] => foo.txt
[4] => somedir
)
Array
(
[0] => somedir
[1] => foo.txt
[2] => bar.php
[3] => ..
[4] => .
)
*/
?>
(PHP 5)
scandir -- 列出指定路径中的文件和目录
说明
array scandir ( string directory [, int sorting_order])
返回一个 array,包含有 directory 中的文件和目录。如果 directory 不是一个目录,则返回布尔值 FALSE,并产生一条 E_WARNING 级别的错误。
默认情况下,返回值是按照字母顺序升序排列的。如果使用了可选参数 sorting_order(设为 1),则按照字母顺序降序排列。
例子 1. 简单的 scandir() 例子
<?php
$dir = '/tmp';
$files1 = scandir($dir);
$files2 = scandir($dir, 1);
print_r($files1);
print_r($files2);
/* Outputs something like:
Array
(
[0] => .
[1] => ..
[2] => bar.php
[3] => foo.txt
[4] => somedir
)
Array
(
[0] => somedir
[1] => foo.txt
[2] => bar.php
[3] => ..
[4] => .
)
*/
?>
例子 2. scandir() 在 PHP 4 中的实现
<?php
$dir = "/tmp";
$dh = opendir($dir);
while (false !== ($filename = readdir($dh))) {
$files[] = $filename;
}
sort($files);
print_r($files);
rsort($files);
print_r($files);
/* Outputs something like:
Array
(
[0] => .
[1] => ..
[2] => bar.php
[3] => foo.txt
[4] => somedir
)
Array
(
[0] => somedir
[1] => foo.txt
[2] => bar.php
[3] => ..
[4] => .
)
*/
?>
身份证号码js验证
check_certnumber.js
function checkIdcard(idcard){
var Errors=new Array("true","身份证号码位数不对!","身份证号码出生日期超出范围或含有非法字符!","身份证号码校验错误!","身份证号码中地区编码不正确!");
var area={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"}
var idcard,Y,JYM;
var S,M;
var idcard_array = new Array();
idcard_array = idcard.split("");
if(idcard.length != 15 && idcard.length != 18) return Errors[1];
//if(idcard.length != 18) return Errors[1];
if (idcard.substr(0,6) == "000000" || idcard.substr(0,6) == "111111" || idcard.substr(0,6) == "222222" || idcard.substr(0,6) == "333333" || idcard.substr(0,6) == "444444" || idcard.substr(0,6) == "555555" || idcard.substr(0,6) == "666666" || idcard.substr(0,6) == "777777" || idcard.substr(0,6) == "888888" || idcard.substr(0,6) == "999999") return Errors[4];
if (idcard.substr(0,6) == "123456" || idcard.substr(0,6) == "234567" || idcard.substr(0,6) == "345678" || idcard.substr(0,6) == "456789" || idcard.substr(0,6) == "567890" || idcard.substr(0,6) == "012345" || idcard.substr(0,6) == "543210" || idcard.substr(0,6) == "432109" || idcard.substr(0,6) == "321098" || idcard.substr(0,6) == "210987" || idcard.substr(0,6) == "109876" || idcard.substr(0,6) == "098765" || idcard.substr(0,6) == "987654" || idcard.substr(0,6) == "876543" || idcard.substr(0,6) == "765432") return Errors[4];
if (idcard.substr(0,6) == "121212" || idcard.substr(0,6) == "131313" || idcard.substr(0,6) == "141414" || idcard.substr(0,6) == "151515" || idcard.substr(0,6) == "161616" || idcard.substr(0,6) == "171717" || idcard.substr(0,6) == "181818" || idcard.substr(0,6) == "191919" || idcard.substr(0,6) == "101010") return Errors[4];
if (idcard.substr(0,6) == "212121" || idcard.substr(0,6) == "232323" || idcard.substr(0,6) == "242424" || idcard.substr(0,6) == "252525" || idcard.substr(0,6) == "262626" || idcard.substr(0,6) == "272727" || idcard.substr(0,6) == "282828" || idcard.substr(0,6) == "292929" || idcard.substr(0,6) == "202020") return Errors[4];
if (idcard.substr(0,6) == "313131" || idcard.substr(0,6) == "323232" || idcard.substr(0,6) == "343434" || idcard.substr(0,6) == "353535" || idcard.substr(0,6) == "363636" || idcard.substr(0,6) == "373737" || idcard.substr(0,6) == "383838" || idcard.substr(0,6) == "393939" || idcard.substr(0,6) == "303030") return Errors[4];
if (idcard.substr(0,6) == "414141" || idcard.substr(0,6) == "424242" || idcard.substr(0,6) == "434343" || idcard.substr(0,6) == "454545" || idcard.substr(0,6) == "464646" || idcard.substr(0,6) == "474747" || idcard.substr(0,6) == "484848" || idcard.substr(0,6) == "494949" || idcard.substr(0,6) == "404040") return Errors[4];
if (idcard.substr(0,6) == "515151" || idcard.substr(0,6) == "525252" || idcard.substr(0,6) == "535353" || idcard.substr(0,6) == "545454" || idcard.substr(0,6) == "565656" || idcard.substr(0,6) == "575757" || idcard.substr(0,6) == "585858" || idcard.substr(0,6) == "595959" || idcard.substr(0,6) == "505050") return Errors[4];
if (idcard.substr(0,6) == "616161" || idcard.substr(0,6) == "626262" || idcard.substr(0,6) == "636363" || idcard.substr(0,6) == "646464" || idcard.substr(0,6) == "656565" || idcard.substr(0,6) == "676767" || idcard.substr(0,6) == "686868" || idcard.substr(0,6) == "696969" || idcard.substr(0,6) == "606060") return Errors[4];
if (idcard.substr(0,6) == "717171" || idcard.substr(0,6) == "727272" || idcard.substr(0,6) == "737373" || idcard.substr(0,6) == "747474" || idcard.substr(0,6) == "757575" || idcard.substr(0,6) == "767676" || idcard.substr(0,6) == "787878" || idcard.substr(0,6) == "797979" || idcard.substr(0,6) == "707070") return Errors[4];
if (idcard.substr(0,6) == "818181" || idcard.substr(0,6) == "828282" || idcard.substr(0,6) == "838383" || idcard.substr(0,6) == "848484" || idcard.substr(0,6) == "858585" || idcard.substr(0,6) == "868686" || idcard.substr(0,6) == "878787" || idcard.substr(0,6) == "898989" || idcard.substr(0,6) == "808080") return Errors[4];
if (idcard.substr(0,6) == "919191" || idcard.substr(0,6) == "929292" || idcard.substr(0,6) == "939393" || idcard.substr(0,6) == "949494" || idcard.substr(0,6) == "959595" || idcard.substr(0,6) == "969696" || idcard.substr(0,6) == "979797" || idcard.substr(0,6) == "989898" || idcard.substr(0,6) == "909090") return Errors[4];
if(area[parseInt(idcard.substr(0,2))]==null) return Errors[4];
switch(idcard.length){
case 15:
if ((parseInt(idcard.substr(6,2))+1900) % 4 == 0 || ((parseInt(idcard.substr(6,2))+1900) % 100 == 0 && (parseInt(idcard.substr(6,2))+1900) % 4 == 0 )){
ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;//测试出生日期的合法性
}
else{
ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;//测试出生日期的合法性
}
if(ereg.test(idcard))
return Errors[0];
else
return Errors[2];
break;
case 18:
if ( parseInt(idcard.substr(6,4)) % 4 == 0 || (parseInt(idcard.substr(6,4)) % 100 == 0 && parseInt(idcard.substr(6,4))%4 == 0 )){
ereg = /^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;//闰年出生日期的合法性正则表达式
}
else{
ereg = /^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;//平年出生日期的合法性正则表达式
}
if(ereg.test(idcard)){
S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7 + (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9 + (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10 + (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5 + (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8 + (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4 + (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2 + parseInt(idcard_array[7]) * 1 + parseInt(idcard_array[8]) * 6 + parseInt(idcard_array[9]) * 3 ;
Y = S % 11;
M = "F";
JYM = "10X98765432";
M = JYM.substr(Y,1);
if(M == idcard_array[17])
return Errors[0];
else
return Errors[3];
}
else
return Errors[2];
break;
default:
return Errors[1];
break;
}
}
test.html 例子代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>身份证号码js验证</title>
<script type="text/javascript" src="check_certnumber.js"></script>
<script type="text/javascript">
////身份证号码验证
function v_cert_number(theForm){
var check_result = checkIdcard(theForm.cardid.value);
if (check_result != "true"){
document.getElementById("cert_number_div").style.color="#ff0000";
document.getElementById("cert_number_div").innerHTML ="<image src='images/Img227876837.gif'> "+check_result;
return false;
}
document.getElementById("cert_number_div").innerHTML ="<image src='images/Img227876838.gif'>身份证号码正确,需要人工验证身份号和姓名是否相符!";
}
////
</script>
<script>
function validateform()
{
var check_result = checkIdcard(reg.cardid.value);
if (check_result != "true"){
window.alert (check_result)
reg.cardid.focus()
return false;
}
}
</script>
</head>
<body>
<form action="real.php?type=upinfo" method="post" name="reg" onSubmit="return validateform();">
<INPUT onblur=javascript:v_cert_number(document.reg) name=cardid>
<DIV class=f1 id=cert_number_div align=left>请如实填写身份证号,作为实名认证的主要依据,如果末位字符是X,则必须输入大写X</DIV>
</form>
</body>
</html>
check_certnumber.js
function checkIdcard(idcard){
var Errors=new Array("true","身份证号码位数不对!","身份证号码出生日期超出范围或含有非法字符!","身份证号码校验错误!","身份证号码中地区编码不正确!");
var area={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"}
var idcard,Y,JYM;
var S,M;
var idcard_array = new Array();
idcard_array = idcard.split("");
if(idcard.length != 15 && idcard.length != 18) return Errors[1];
//if(idcard.length != 18) return Errors[1];
if (idcard.substr(0,6) == "000000" || idcard.substr(0,6) == "111111" || idcard.substr(0,6) == "222222" || idcard.substr(0,6) == "333333" || idcard.substr(0,6) == "444444" || idcard.substr(0,6) == "555555" || idcard.substr(0,6) == "666666" || idcard.substr(0,6) == "777777" || idcard.substr(0,6) == "888888" || idcard.substr(0,6) == "999999") return Errors[4];
if (idcard.substr(0,6) == "123456" || idcard.substr(0,6) == "234567" || idcard.substr(0,6) == "345678" || idcard.substr(0,6) == "456789" || idcard.substr(0,6) == "567890" || idcard.substr(0,6) == "012345" || idcard.substr(0,6) == "543210" || idcard.substr(0,6) == "432109" || idcard.substr(0,6) == "321098" || idcard.substr(0,6) == "210987" || idcard.substr(0,6) == "109876" || idcard.substr(0,6) == "098765" || idcard.substr(0,6) == "987654" || idcard.substr(0,6) == "876543" || idcard.substr(0,6) == "765432") return Errors[4];
if (idcard.substr(0,6) == "121212" || idcard.substr(0,6) == "131313" || idcard.substr(0,6) == "141414" || idcard.substr(0,6) == "151515" || idcard.substr(0,6) == "161616" || idcard.substr(0,6) == "171717" || idcard.substr(0,6) == "181818" || idcard.substr(0,6) == "191919" || idcard.substr(0,6) == "101010") return Errors[4];
if (idcard.substr(0,6) == "212121" || idcard.substr(0,6) == "232323" || idcard.substr(0,6) == "242424" || idcard.substr(0,6) == "252525" || idcard.substr(0,6) == "262626" || idcard.substr(0,6) == "272727" || idcard.substr(0,6) == "282828" || idcard.substr(0,6) == "292929" || idcard.substr(0,6) == "202020") return Errors[4];
if (idcard.substr(0,6) == "313131" || idcard.substr(0,6) == "323232" || idcard.substr(0,6) == "343434" || idcard.substr(0,6) == "353535" || idcard.substr(0,6) == "363636" || idcard.substr(0,6) == "373737" || idcard.substr(0,6) == "383838" || idcard.substr(0,6) == "393939" || idcard.substr(0,6) == "303030") return Errors[4];
if (idcard.substr(0,6) == "414141" || idcard.substr(0,6) == "424242" || idcard.substr(0,6) == "434343" || idcard.substr(0,6) == "454545" || idcard.substr(0,6) == "464646" || idcard.substr(0,6) == "474747" || idcard.substr(0,6) == "484848" || idcard.substr(0,6) == "494949" || idcard.substr(0,6) == "404040") return Errors[4];
if (idcard.substr(0,6) == "515151" || idcard.substr(0,6) == "525252" || idcard.substr(0,6) == "535353" || idcard.substr(0,6) == "545454" || idcard.substr(0,6) == "565656" || idcard.substr(0,6) == "575757" || idcard.substr(0,6) == "585858" || idcard.substr(0,6) == "595959" || idcard.substr(0,6) == "505050") return Errors[4];
if (idcard.substr(0,6) == "616161" || idcard.substr(0,6) == "626262" || idcard.substr(0,6) == "636363" || idcard.substr(0,6) == "646464" || idcard.substr(0,6) == "656565" || idcard.substr(0,6) == "676767" || idcard.substr(0,6) == "686868" || idcard.substr(0,6) == "696969" || idcard.substr(0,6) == "606060") return Errors[4];
if (idcard.substr(0,6) == "717171" || idcard.substr(0,6) == "727272" || idcard.substr(0,6) == "737373" || idcard.substr(0,6) == "747474" || idcard.substr(0,6) == "757575" || idcard.substr(0,6) == "767676" || idcard.substr(0,6) == "787878" || idcard.substr(0,6) == "797979" || idcard.substr(0,6) == "707070") return Errors[4];
if (idcard.substr(0,6) == "818181" || idcard.substr(0,6) == "828282" || idcard.substr(0,6) == "838383" || idcard.substr(0,6) == "848484" || idcard.substr(0,6) == "858585" || idcard.substr(0,6) == "868686" || idcard.substr(0,6) == "878787" || idcard.substr(0,6) == "898989" || idcard.substr(0,6) == "808080") return Errors[4];
if (idcard.substr(0,6) == "919191" || idcard.substr(0,6) == "929292" || idcard.substr(0,6) == "939393" || idcard.substr(0,6) == "949494" || idcard.substr(0,6) == "959595" || idcard.substr(0,6) == "969696" || idcard.substr(0,6) == "979797" || idcard.substr(0,6) == "989898" || idcard.substr(0,6) == "909090") return Errors[4];
if(area[parseInt(idcard.substr(0,2))]==null) return Errors[4];
switch(idcard.length){
case 15:
if ((parseInt(idcard.substr(6,2))+1900) % 4 == 0 || ((parseInt(idcard.substr(6,2))+1900) % 100 == 0 && (parseInt(idcard.substr(6,2))+1900) % 4 == 0 )){
ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;//测试出生日期的合法性
}
else{
ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;//测试出生日期的合法性
}
if(ereg.test(idcard))
return Errors[0];
else
return Errors[2];
break;
case 18:
if ( parseInt(idcard.substr(6,4)) % 4 == 0 || (parseInt(idcard.substr(6,4)) % 100 == 0 && parseInt(idcard.substr(6,4))%4 == 0 )){
ereg = /^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;//闰年出生日期的合法性正则表达式
}
else{
ereg = /^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;//平年出生日期的合法性正则表达式
}
if(ereg.test(idcard)){
S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7 + (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9 + (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10 + (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5 + (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8 + (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4 + (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2 + parseInt(idcard_array[7]) * 1 + parseInt(idcard_array[8]) * 6 + parseInt(idcard_array[9]) * 3 ;
Y = S % 11;
M = "F";
JYM = "10X98765432";
M = JYM.substr(Y,1);
if(M == idcard_array[17])
return Errors[0];
else
return Errors[3];
}
else
return Errors[2];
break;
default:
return Errors[1];
break;
}
}
test.html 例子代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>身份证号码js验证</title>
<script type="text/javascript" src="check_certnumber.js"></script>
<script type="text/javascript">
////身份证号码验证
function v_cert_number(theForm){
var check_result = checkIdcard(theForm.cardid.value);
if (check_result != "true"){
document.getElementById("cert_number_div").style.color="#ff0000";
document.getElementById("cert_number_div").innerHTML ="<image src='images/Img227876837.gif'> "+check_result;
return false;
}
document.getElementById("cert_number_div").innerHTML ="<image src='images/Img227876838.gif'>身份证号码正确,需要人工验证身份号和姓名是否相符!";
}
////
</script>
<script>
function validateform()
{
var check_result = checkIdcard(reg.cardid.value);
if (check_result != "true"){
window.alert (check_result)
reg.cardid.focus()
return false;
}
}
</script>
</head>
<body>
<form action="real.php?type=upinfo" method="post" name="reg" onSubmit="return validateform();">
<INPUT onblur=javascript:v_cert_number(document.reg) name=cardid>
<DIV class=f1 id=cert_number_div align=left>请如实填写身份证号,作为实名认证的主要依据,如果末位字符是X,则必须输入大写X</DIV>
</form>
</body>
</html>
PHP提供两个方便我们引用数据的魔法引用函数magic_quotes_gpc和magic_quotes_runtime,这两个函数如果在php.ini设置为ON的时候,就会为我们引用的数据碰到单引号'和双引号"以及反斜线 \ 是自动加上反斜线,帮我们自动转译符号,确保数据操作的正确运行,可是我们在php不同的版本或者不同的服务器配置下,有的magic_quotes_gpc和magic_quotes_runtime设置为on,有的又是off,所以我们写的程序必须符合on和off两种情况。那么magic_quotes_gpc和magic_quotes_runtime两个函数有什么区别呢?看下面的说明:
magic_quotes_gpc
作用范围是:WEB客户服务端;
作用时间:请求开始是,例如当脚本运行时.
magic_quotes_runtime
作用范围:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的;
作用时间:每次当脚本访问运行状态中产生的数据.
所以
magic_quotes_gpc的设定值将会影响通过Get/Post/Cookies获得的数据
magic_quotes_runtime的设定值将会影响从文件中读取的数据或从数据库查询得到的数据
magic_quotes_gpc
作用范围是:WEB客户服务端;
作用时间:请求开始是,例如当脚本运行时.
magic_quotes_runtime
作用范围:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的;
作用时间:每次当脚本访问运行状态中产生的数据.
所以
magic_quotes_gpc的设定值将会影响通过Get/Post/Cookies获得的数据
magic_quotes_runtime的设定值将会影响从文件中读取的数据或从数据库查询得到的数据
生成word的代码
header("Content-type: application/octet-stream");
header("Accept-Ranges: bytes");
header('Content-type: application/doc');
header('Content-Disposition: attachment; filename="测试.doc"');
生成excel的代码
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Content-type:application/vnd.ms-excel");
Header("Content-Disposition:attachment;filename="测试.xls"');
但是导的过程中也会遇到很多问题,比如说导出excel,某列导出的是身份证号的话,打开excel文件以后会发现,身份证号自动采用科学计数法,无论如何修改该列属性,都无法实现自己的要求。网上有人说,先把该列属性改为文本以后,再输入就没有问题,实际操作excel确实如此,但是,php程序导出就无法做到了。也有人说,在身份证号前加单引号,试过也不行,最后在导出的身份证号数据前加空格问题解决,空格是html代码的空格.问题解决。
header("Content-type: application/octet-stream");
header("Accept-Ranges: bytes");
header('Content-type: application/doc');
header('Content-Disposition: attachment; filename="测试.doc"');
生成excel的代码
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Content-type:application/vnd.ms-excel");
Header("Content-Disposition:attachment;filename="测试.xls"');
但是导的过程中也会遇到很多问题,比如说导出excel,某列导出的是身份证号的话,打开excel文件以后会发现,身份证号自动采用科学计数法,无论如何修改该列属性,都无法实现自己的要求。网上有人说,先把该列属性改为文本以后,再输入就没有问题,实际操作excel确实如此,但是,php程序导出就无法做到了。也有人说,在身份证号前加单引号,试过也不行,最后在导出的身份证号数据前加空格问题解决,空格是html代码的空格.问题解决。
作者:smarteng
<input name="member.birth" type="text" value="1982-1-1" size="14" readonly onClick="showcalendar(event, this);" onFocus="showcalendar(event, this);if(this.value=='0000-00-00')this.value=''" />
1.readonly : 是让控件只读,不可以直接输入
2. onClick="showcalendar(event, this);" : 单击显示日历控件
3.onFocus="showcalendar(event, this);if(this.value=='0000-00-00')this.value=''" : 显示日历,并根据条件初始化日历控件的值
<input name="member.birth" type="text" value="1982-1-1" size="14" readonly onClick="showcalendar(event, this);" onFocus="showcalendar(event, this);if(this.value=='0000-00-00')this.value=''" />
1.readonly : 是让控件只读,不可以直接输入
2. onClick="showcalendar(event, this);" : 单击显示日历控件
3.onFocus="showcalendar(event, this);if(this.value=='0000-00-00')this.value=''" : 显示日历,并根据条件初始化日历控件的值
下载文件 (已下载 888 次)
以下是破解的国内某著名php下载系统做的license.php验证文件。源码如下:
license.php
<?php
//----------------------------
// 以下是域名: www.dzhope.com的授权码
$License = "299CCBQC19B7RBD16BA9D2A4K12579A659DMT27C8EZ7D915SC9552B297967D4D059087EC25A3D7DD154808B1C676D3D63F3A63E9EDABF57A8C54F96C82ECF47798344ED570DBEE2845D726738D75163FCD39EFE1AE18F317CA195E3FA18A7==ACE64==WDA3833324EA9C85C440ED1904ECEF0BA4EF420FFA86D5C0C77E4F72BAEC1B0D5A6810921F";
?>
chklicense.php
验证license.php的文件代码如下:
<?php
/*********************/
/* */
/* Version : 1.0 */
/* Author :jed */
/* */
/* */
/*********************/
function switch_str( $str )
{
$arr[0] = "5%R0Dqhlyhg";
$arr[1] = "eLKR1(1A0Lq";
$arr[2] = "uw)teDc9veP";
$arr[3] = "uaNueju&pPa";
$arr[4] = "sA:pWEYAs?q";
$arr[5] = ":pWEY:pWEYd";
$arr[6] = "0P7\$0lg#ws?";
$arr[7] = ")teDc)teDac";
$arr[8] = "PAkXyZe~n3P";
$arr[9] = "PAkadXyZe~n";
$arr['a'] = "jVtlsAXWqaa";
$arr['b'] = "dfjVtlsAXWq";
$arr['c'] = "jVtljVtljVt";
$arr['d'] = "Q3vn9G3HHWl";
$arr['e'] = "Qn9Gn)6HWlf";
$arr['f'] = "Q3vrn9GHWlf";
$arr['g'] = "n9G3H5nBy&f";
$arr['h'] = "XyZe~n3@ila";
$arr['i'] = "Q3XyZe~nWlf";
$arr['j'] = "Q3vrn)6HWlf";
$arr['k'] = "MBtn9G3H5nB";
$arr['l'] = "8Ce7unaHWlf";
$arr['m'] = "aO)WNJ3J3la";
$arr['n'] = "aO)WNJ3ssce";
$arr['o'] = "f?:0I2NiDC)";
$arr['p'] = "Q3vrn)6HWlf";
$arr['q'] = "f&HPW5bm9ya";
$arr['r'] = "8CeanE2NWlf";
$arr['s'] = "*TKS(9klasf";
$arr['t'] = "O)WNJ3kcOee";
$arr['u'] = "sAXWqO(M7qc";
$arr['v'] = "qO(M7qccCYQ";
$arr['w'] = "vrn)6HWHWlf";
$arr['x'] = "dfadaadeevf";
$arr['y'] = "G3H5nBy&8aV";
$arr['z'] = "eedaunE2Nqa";
if ( isset( $arr[$str] ) )
{
return $str;
}
return base64_encode( $str );
}
function numtostr( $num )
{
$arr[0] = "EQRAK";
$arr[1] = "QRAKA";
$arr[2] = "TZSB7";
$arr[3] = "WEYAS";
$arr[4] = "J3KCO";
$arr[5] = "LSAXW";
$arr[6] = "MBTN9";
$arr[7] = "H5NBY";
return $arr[$num];
}
function strtonum( $str )
{
$arr['EQRAK'] = 0;
$arr['QRAKA'] = 1;
$arr['TZSB7'] = 2;
$arr['WEYAS'] = 3;
$arr['J3KCO'] = 4;
$arr['LSAXW'] = 5;
$arr['MBTN9'] = 6;
$arr['H5NBY'] = 7;
if ( isset( $arr[$str] ) )
{
return $arr[$str];
}
return false;
}
function strfun( $i )
{
$fun[0] = "md5";
$fun[1] = "sha1";
$fun[2] = "base64_encode";
$fun[3] = "ord";
$fun[4] = "switch_str";
$fun[5] = "base64_encode";
$fun[6] = "sha1";
$fun[7] = "sha1";
$fun[8] = "md5";
$fun[9] = "switch_str";
$fun[10] = "sha1";
$fun[11] = "switch_str";
$fun[12] = "md5";
$fun[13] = "ord";
$fun[14] = "switch_str";
$fun[15] = "base64_encode";
$fun[16] = "sha1";
if ( isset( $fun[$i] ) )
{
return $fun[$i];
}
return "base64_encode";
}
function getlicence( )
{
global $License;
$domain = $udomain = strtolower( $_SERVER['SERVER_NAME'] );
if ( substr( $domain, 0, 7 ) == "http://" )
{
$domain = substr( $domain, 7 );
}
$domainarr = explode( ".", $domain );
if ( count( $domainarr ) == 2 )
{
$domain = "www.".$domain;
}
else
{
$allow = array( "download", "down", "software", "soft", "test", "v3" );
if ( in_array( $domainarr[0], $allow ) )
{
$domainarr[0] = "www";
}
$domain = implode( ".", $domainarr );
}
$domainarr = explode( ".", $domain );
$domain = "";
foreach ( $domainarr as $key => $val )
{
$domain .= $domain == "" ? strrev( $val ) : ".".strrev( $val );
}
$content = "";
$i = 0;
for ( ; $i < strlen( $domain ); ++$i )
{
$function = strfun( $i );
$content .= $function( $domain[$i] );
}
$content = strrev( strtoupper( $content ) );
if ( !file_exists( "../core/license.php" ) )
{
common::_error( "授权文件license.php 不存在!" );
}
require_once( "../core/license.php" );
$j = $numarr = "";
$jarr[] = 0;
$i = 0;
for ( ; $i < $License[0]; ++$i )
{
if ( $j == "" )
{
$j = ( $i + 1 ) * 5;
$j += 1;
}
else
{
$j += 25;
}
$numarr[$i] = $License[$j].$License[$j + 5].$License[$j + 10].$License[$j + 15].$License[$j + 20];
$jarr[] = $j;
$jarr[] = $j + 5;
$jarr[] = $j + 10;
$jarr[] = $j + 15;
$jarr[] = $j + 20;
}
$num = "";
if ( is_array( $numarr ) )
{
foreach ( $numarr as $key => $val )
{
$num .= strtonum( $val );
}
}
$MyLicense = substr( $License, 1 );
$GLOBALS['licensedomain'] = $udomain;
$GLOBALS['licensenum'] = $num = octdec( $num );
$numstr =decoct( $num );
$newnumstr = "";
$i = 0;
for ( ; $i < strlen( $numstr ); ++$i )
{
$newnumstr .= numtostr( $numstr[$i] );
}
$i = 0;
for ( ; $i < strlen( $newnumstr ); ++$i )
{
$j = ( $i + 1 ) * 5;
$content[$j] = $newnumstr[$i];
}
if ( $content == $MyLicense )
{
return $num;
}
common::_error( "授权文件license.php 中的授权码有误!" );
}
?>
license.php
<?php
//----------------------------
// 以下是域名: www.dzhope.com的授权码
$License = "299CCBQC19B7RBD16BA9D2A4K12579A659DMT27C8EZ7D915SC9552B297967D4D059087EC25A3D7DD154808B1C676D3D63F3A63E9EDABF57A8C54F96C82ECF47798344ED570DBEE2845D726738D75163FCD39EFE1AE18F317CA195E3FA18A7==ACE64==WDA3833324EA9C85C440ED1904ECEF0BA4EF420FFA86D5C0C77E4F72BAEC1B0D5A6810921F";
?>
chklicense.php
验证license.php的文件代码如下:
<?php
/*********************/
/* */
/* Version : 1.0 */
/* Author :jed */
/* */
/* */
/*********************/
function switch_str( $str )
{
$arr[0] = "5%R0Dqhlyhg";
$arr[1] = "eLKR1(1A0Lq";
$arr[2] = "uw)teDc9veP";
$arr[3] = "uaNueju&pPa";
$arr[4] = "sA:pWEYAs?q";
$arr[5] = ":pWEY:pWEYd";
$arr[6] = "0P7\$0lg#ws?";
$arr[7] = ")teDc)teDac";
$arr[8] = "PAkXyZe~n3P";
$arr[9] = "PAkadXyZe~n";
$arr['a'] = "jVtlsAXWqaa";
$arr['b'] = "dfjVtlsAXWq";
$arr['c'] = "jVtljVtljVt";
$arr['d'] = "Q3vn9G3HHWl";
$arr['e'] = "Qn9Gn)6HWlf";
$arr['f'] = "Q3vrn9GHWlf";
$arr['g'] = "n9G3H5nBy&f";
$arr['h'] = "XyZe~n3@ila";
$arr['i'] = "Q3XyZe~nWlf";
$arr['j'] = "Q3vrn)6HWlf";
$arr['k'] = "MBtn9G3H5nB";
$arr['l'] = "8Ce7unaHWlf";
$arr['m'] = "aO)WNJ3J3la";
$arr['n'] = "aO)WNJ3ssce";
$arr['o'] = "f?:0I2NiDC)";
$arr['p'] = "Q3vrn)6HWlf";
$arr['q'] = "f&HPW5bm9ya";
$arr['r'] = "8CeanE2NWlf";
$arr['s'] = "*TKS(9klasf";
$arr['t'] = "O)WNJ3kcOee";
$arr['u'] = "sAXWqO(M7qc";
$arr['v'] = "qO(M7qccCYQ";
$arr['w'] = "vrn)6HWHWlf";
$arr['x'] = "dfadaadeevf";
$arr['y'] = "G3H5nBy&8aV";
$arr['z'] = "eedaunE2Nqa";
if ( isset( $arr[$str] ) )
{
return $str;
}
return base64_encode( $str );
}
function numtostr( $num )
{
$arr[0] = "EQRAK";
$arr[1] = "QRAKA";
$arr[2] = "TZSB7";
$arr[3] = "WEYAS";
$arr[4] = "J3KCO";
$arr[5] = "LSAXW";
$arr[6] = "MBTN9";
$arr[7] = "H5NBY";
return $arr[$num];
}
function strtonum( $str )
{
$arr['EQRAK'] = 0;
$arr['QRAKA'] = 1;
$arr['TZSB7'] = 2;
$arr['WEYAS'] = 3;
$arr['J3KCO'] = 4;
$arr['LSAXW'] = 5;
$arr['MBTN9'] = 6;
$arr['H5NBY'] = 7;
if ( isset( $arr[$str] ) )
{
return $arr[$str];
}
return false;
}
function strfun( $i )
{
$fun[0] = "md5";
$fun[1] = "sha1";
$fun[2] = "base64_encode";
$fun[3] = "ord";
$fun[4] = "switch_str";
$fun[5] = "base64_encode";
$fun[6] = "sha1";
$fun[7] = "sha1";
$fun[8] = "md5";
$fun[9] = "switch_str";
$fun[10] = "sha1";
$fun[11] = "switch_str";
$fun[12] = "md5";
$fun[13] = "ord";
$fun[14] = "switch_str";
$fun[15] = "base64_encode";
$fun[16] = "sha1";
if ( isset( $fun[$i] ) )
{
return $fun[$i];
}
return "base64_encode";
}
function getlicence( )
{
global $License;
$domain = $udomain = strtolower( $_SERVER['SERVER_NAME'] );
if ( substr( $domain, 0, 7 ) == "http://" )
{
$domain = substr( $domain, 7 );
}
$domainarr = explode( ".", $domain );
if ( count( $domainarr ) == 2 )
{
$domain = "www.".$domain;
}
else
{
$allow = array( "download", "down", "software", "soft", "test", "v3" );
if ( in_array( $domainarr[0], $allow ) )
{
$domainarr[0] = "www";
}
$domain = implode( ".", $domainarr );
}
$domainarr = explode( ".", $domain );
$domain = "";
foreach ( $domainarr as $key => $val )
{
$domain .= $domain == "" ? strrev( $val ) : ".".strrev( $val );
}
$content = "";
$i = 0;
for ( ; $i < strlen( $domain ); ++$i )
{
$function = strfun( $i );
$content .= $function( $domain[$i] );
}
$content = strrev( strtoupper( $content ) );
if ( !file_exists( "../core/license.php" ) )
{
common::_error( "授权文件license.php 不存在!" );
}
require_once( "../core/license.php" );
$j = $numarr = "";
$jarr[] = 0;
$i = 0;
for ( ; $i < $License[0]; ++$i )
{
if ( $j == "" )
{
$j = ( $i + 1 ) * 5;
$j += 1;
}
else
{
$j += 25;
}
$numarr[$i] = $License[$j].$License[$j + 5].$License[$j + 10].$License[$j + 15].$License[$j + 20];
$jarr[] = $j;
$jarr[] = $j + 5;
$jarr[] = $j + 10;
$jarr[] = $j + 15;
$jarr[] = $j + 20;
}
$num = "";
if ( is_array( $numarr ) )
{
foreach ( $numarr as $key => $val )
{
$num .= strtonum( $val );
}
}
$MyLicense = substr( $License, 1 );
$GLOBALS['licensedomain'] = $udomain;
$GLOBALS['licensenum'] = $num = octdec( $num );
$numstr =decoct( $num );
$newnumstr = "";
$i = 0;
for ( ; $i < strlen( $numstr ); ++$i )
{
$newnumstr .= numtostr( $numstr[$i] );
}
$i = 0;
for ( ; $i < strlen( $newnumstr ); ++$i )
{
$j = ( $i + 1 ) * 5;
$content[$j] = $newnumstr[$i];
}
if ( $content == $MyLicense )
{
return $num;
}
common::_error( "授权文件license.php 中的授权码有误!" );
}
?>