php 验证身份证号
2024-08-28 02:32:11
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;
}
}
// 计算身份证校验码,根据国家标准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];
}
$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 999,这些是为百岁以上老人的特殊编码
if(array_search(substr($idcard,12,3),array('996','997','998','999')) !== false){
$idcard=substr($idcard,0,6).'18'.substr($idcard,6,9);
}else{
$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);
if(idcard_verify_number($idcard_base)!=strtoupper(substr($idcard,17,1))){
return false;
}else{
return true;
}
}
最新文章
- tomcat7 IP限制配置
- heartbeat重要文件的配置参数说明
- css3 -- 多列
- C#关键字base
- php大力力 [032节] php设计时候遇见麻烦:XQB50-H8268 进水电磁阀
- C#读取Excel五种方式的体会
- oracle dblink使用
- poj 2631 Roads in the North【树的直径裸题】
- 为什么class中属性以空格分隔?
- 学习AJAX(二)
- 绩效考核指标KPI 听课笔记
- RMIC命令提示找不到类的问题
- Matlab立体标定mat转换成Opencv的CvMat
- java 多线程,T1 T2 T3 顺序执行
- 前端解析websocket数据问题
- (原创)Callable、FutureTask中阻塞超时返回的坑点
- Git:一本书 + 一个站点,让你掌握 Git
- oracle自定义类型 示例
- Interval GCD
- 《Windows核心编程》第十一章——线程池