
首先在function.php这个公共方法里面添加下面这几个方法,如下
// 计算校验码,根据国家标准GB 11643-1999
function idcard_verify_number($idcard_base){
if(strlen($idcard_base)!=17){
return false;
}
//加权因子
$factor=array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
//校验码对应值
$verify_number_list=array(‘1′,’0′,’X’,’9′,’8′,’7′,’6′,’5′,’4′,’3′,’2′);
$checksum=0;
for($i=0;$i<strlen($idcard_base);$i++){
$checksum += substr($idcard_base, $i, 1) * $factor[$i]。 $checksum += substr($idcard_base,$i,1) * $factor[$i]。strchar = plainstr.substr(i-1, 1)。

}
$mod=$checksum % 11;
$verify_number=$verify_number_list[$mod];
return $verify_number;
}
// 将15位升级到18位
function idcard_15to18($idcard){
if(strlen($idcard)!=15){
return false;
}else{
// 如果顺序码是996 997 998 999php 验证号码,这些是为百岁以上老人的特殊编码
if (array_search(substr($idcard, 12, 3), array('996', '997', '998', '999')) 。 if(array_search(substr($idcard,12,3),array('。if (parseint(idcard.substr(6, 4)) % 4 == 0 || (parseint(idcard.substr(6, 4)) % 100 == 0 && parseint(idcard.substr(6, 4)) % 4 == 0)) {。
$idcard = substr($idcard, 0, 6) . '18'. substr($idcard, 6, 9)。$idcard = substr($idcard, 0, 6) . '19'. substr($idcard, 6,9)。$idcard = substr($idcard, 0, 6) . '19'. substr($idcard, 6, 9)。

}else{
$idcard = substr($idcard, 0, 6) . '18'. substr($idcard, 6, 9)。$idcard = substr($idcard, 0, 6) . '19'. substr($idcard, 6,9)。$idcard = substr($idcard, 0, 6) . '19'. substr($idcard, 6, 9)。
}
}
$idcard=$idcard.idcard_verify_number($idcard);
return $idcard;
}
// 18位校验码有效性检查
function idcard_checksum18($idcard){
if(strlen($idcard)!=18){
return false;
}
$idcard_base=substr($idcard,0,17);

=strtoupper(substr($idcard,17,1))){ 。= strtoupper(substr($idcard, 17, 1))){。if (idcard_verify_number($idcard_base) 。
return false;
}else{
return true;
}
}
然后验证的时候,在模型那里定义验证规则php 验证号码,验证,如下
<?php
namespace Admin\Model;
use Think\Model;
class EmployeeModel extends Model{
protected $trueTableName=’ecs_erp_employee’;
protected $patchValidate = true;

protected $_validate=array(
array(‘idcard’,’validation_filter_id_card’,’输入的格式不正确’,1,’callback’,3),
);
function validation_filter_id_card($id_card){
if(strlen($id_card)==18){
return idcard_checksum18($id_card);
}elseif((strlen($id_card)==15)){
$id_card=idcard_15to18($id_card);
return idcard_checksum18($id_card);
}else{
return false;
}
}
}
完。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-110422-1.html
”我摇摇头说
要不
配套组件和运用经验都不充分