标签 php 下的文章

在网站上实现对身份证号码合法性的校验可以有效预防 PHP 脚本接收到注册表单传递过来的非法身份证号码。

中国(大陆)公民身份证号码每一位所代表的意义,网上很多文章都有介绍,在此就不赘述。其中身份证号码的最后一位是校验码,根据前 17 位计算得到。算法大概是这样:把前 17 位的每一个数字和一串加权因子相乘,再计算这些乘积的和;把这些乘积的和模 11 得到的数字作为序号,最后在一个校验码串中提取出与序号相对应的字符。当然,网上也有不少文章描述如何计算这个校验码,下面尝试用 PHP 脚本来完成这一工作。

假设某中国(大陆)公民的身份证号码前 17 位是:44010221990101001(注:此人出生于2199年)。根据上面的算法,代码应该是这样的:

<?php
$body 
'44010221990101001'//身份证号码前 17 位,可以从各种数据源中获得(如数据库、用户提交的表单等)
$wi = array(7910584216379105842); //加权因子
$ai = array('1''0''X''9''8''7''6''5''4''3''2'); //校验码串

for ($i 0$i 17$i ++) //按顺序循环处理前 17 位
{
    
$b = (int) $body{$i}; //提取前 17 位的其中一位,并将变量类型转为实数
    
$w $wi[$i]; //提取相应的加权因子
    
$sigma += $b $w//把从身份证号码中提取的一位数字和加权因子相乘,并累加
}

$number $sigma 11//计算序号
$check_number $ai[$number]; //按照序号从校验码串中提取相应的字符
echo $body $check_number//输出
?>
运行以上代码之后,可以算出该身份证的校验码为 9 。

- 阅读剩余部分 -

公司的服务器组遍布伟大祖国的大江南北,操作系统也都不相同。最近使用 Cacti + RRDTool + Net-SNMP 对这些服务器实施了统一的性能监控管理。单纯的 Cacti 不是监控工具,她基于 AMP 环境和 SNMP 协议,使用 snmpget 获取流量数据,使用 RRDTool 组件绘图。并且 Cacti 有个别名,叫做“仙人掌”。她的界面非常漂亮,你根本无需明白那些 RRDTool 的复杂参数就能轻易地绘出漂亮的图形。另外,她提供了强大的数据管理和用户管理功能,可以与 LDAP 结合进行用户的验证。还提供了自定义模板的功能,让你添加自己的 snmp_query 和 script。可以说,Cacti 将 RRDTool 复杂难懂的缺点都补足了。所以,Cacti 被认识是 MRTG 的最佳替代品。

1、监控管理端配置

监控端基于 FreeBSD 6.2 操作系统、AMP(ApacheMySQLPHP)环境,其安装配置过程在此不赘述,请寻求搜索引擎的帮助。值得注意的是,PHP 最好加上 SNMP 的支持。在编译的时候,加上 -enable-snmp。另外,PHP 不能运行在安全模式下,否则 Cacti 将不正常,无法调用 /usr/local/bin/ 下面的文件。除此之外,有一种说法称 MySQL 5 以上的版本不能正常运行 Cacti,就我的个人测试,暂未发现类似的情况。

安装完 AMP 之后开始下载并安装 RRDTool。值得注意的是,RRDTool 1.2.x 版本是用 libart 和 freetype 画图,相比 1.1.x 版本,前者的绘图速度会稍稍慢一些。从 1.2.x 版本开始,RRDTool 不再自带外部的 lib 库,所以需要从这里下载这些库来安装。而 1.1.x 版本自带了 GD 库,可惜这个 GD 库不支持中文,绘中文的时候会出现乱码。

这里选用 1.2.26 版本的 RRDTool,所以需要先安装 lib 库。

安装 cgilib

#tar -zxvf cgilib-0.5.tar.gz
#cd cgilib-0.5
#vi cgi.c
去掉:

#include <malloc.h> 然后:

#vi cgitest.c 将第 116 行

printf ("<h3>Cookie "Library" set</h3>\n"); 改为:

printf ("<h3>Cookie \"Library\" set</h3>\n"); 因为 cgilib 版本为 linux 版本,用 make 无法安装,所以:

#gmake
#gmake install
#cp *.h /usr/include/
#cp libcgi* /usr/lib
安装 zlib

#tar -zxvf zlib-1.2.2.tar.gz
#cd zlib-1.2.2
#./configure --prefix=/usr
#make
#make install
安装 libpng

#tar -zxvf libpng-1.2.8-config.tar.gz
#cd libpng-1.2.8-config
#cp scripts/makefile.gcmmx makefile
#./configure --disable-shared --prefix=/usr
#make
#make install
安装 freetype(需事先安装 gmake):

#tar -zxvf freetype-2.1.10.tar.gz
#mv /usr/bin/make /usr/bin/make.bak
#./configure --disable-shared --prefix=/usr
#make
#make install
#mv /usr/bin/make.bak /usr/bin/make
安装 libart_lgpl

#tar -zxvf libart_lgpl-2.3.17.tar.gz
#./configure --disable-shared --prefix=/usr
#make
#make install
安装 RRDTool

#tar -zxvf rrdtool-1.2.6.tar.gz
#./configure
#make
#make install
#cp /usr/local/rrdtool/bin/* /usr/local/bin/
#ln -s /usr/local/rrdtool-1.2.6 /usr/local/rrdtool
安装 net-snmp

#tar -zxvf net-snmp-5.2.1.2.tar.gz
#cd net-snmp-5.2.1.2
#./configure
#make
#make install
安装完成后运行 snmpget、snmpwalk 测试是否安装成功。

安装 Cacti

#cp cacti-0.8.7a.tar.gz /www
#cd /www/
#tar -xzvf cacti-0.8.7a.tar.gz
#mv cacti-0.8.7a cacti
#chown -R www:www cacti/
分配数据库权限:

#mysql -u root -p
mysql>create database cacti;
mysql>grant all privileges on cacti.* to cactiuser@localhost 
identified by 'password';
mysql>quit;
修改 Cacti 配置文件:

#vi /www/cacti/include/config.php
$database_type = "mysql";
$database_default = "cacti";
$database_hostname = "localhost";
$database_username = "cactiuser";
$database_password = "password";
导入数据库:

/usr/local/mysql/bin/mysql -u root -p cactidb < /www/cacti/cacti.sql 设置刷新时间:

#crontab -e
*/1 * * * * /usr/local/php/bin/php /www/cacti/poller.php > /dev/null 2>&1
这里的 */1 代表每一分钟执行一次。

2、被监控端配置

2.1、FreeBSD 系统

未完待续。

2.2、Windows 2003 系统

未完待续。