/**
* 验证合法性
*/
function checkIdCard($idcard){
$City = array(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=>"国外");
$iSum = 0;
$idCardLength = strlen($idcard);
//长度验证
if(!preg_match('/^\d{17}(\d|x)$/i',$idcard) and !preg_match('/^\d{15}$/i',$idcard)){
return false;
}
//地区验证
if(!array_key_exists(intval(substr($idcard,0,2)),$City)){
return false;
}
// 15位验证生日,转换为18位
if ($idCardLength == 15){
$sBirthday = '19'.substr($idcard,6,2).'-'.substr($idcard,8,2).'-'.substr($idcard,10,2);
$d = new DateTime($sBirthday);
$dd = $d->format('Y-m-d');
if($sBirthday != $dd){
return false;
}
$idcard = substr($idcard,0,6)."19".substr($idcard,6,9);//15to18
$Bit18 = getVerifyBit($idcard);//算出第18位校验码
$idcard = $idcard.$Bit18;
}
// 判断是否大于2078年,小于1900年
$year = substr($idcard,6,4);
if ($year<1900 || $year>2078 ){
return false;
}
//18位处理
$sBirthday = substr($idcard,6,4).'-'.substr($idcard,10,2).'-'.substr($idcard,12,2);
$d = new DateTime($sBirthday);
$dd = $d->format('Y-m-d');
if($sBirthday != $dd){
return false;
}
//编码规范验证
$idcard_base = substr($idcard,0,17);
if(strtoupper(substr($idcard,17,1)) != $this->getVerifyBit($idcard_base)){
return false;
}
return $idcard;
}
// 计算校验码,根据国家标准GB 11643-1999
function getVerifyBit($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];
}
$mod = $checksum % 11;
$verify_number = $verify_number_list[$mod];
return $verify_number;
}
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。