PHP验证二代身份证

PHP验证二代身份证functionvalidation_filter_id_card($id_card){ if(strlen($id_card)==18){ returnidcard_checksum18($id_card); }elseif((strlen($id_card)==15)){ $id_card=idcard_15to18($id_card); return

大家好,又见面了,我是你们的朋友全栈君。

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; 
	} 
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/153652.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 自动加密web.config配置节批处理

    自动加密web.config配置节批处理

  • 根据经纬度计算距离的公式是什么_经纬度距离计算公式

    根据经纬度计算距离的公式是什么_经纬度距离计算公式privateconstdoubleEARTH_RADIUS=6378.137;privatestaticdoublerad(doubled){returnd*Math.PI/180.0;}publicstaticdoubleGetDistance(doublelat1,doublelng1,doublelat2,doublelng2){do…

  • Mac OS设置rootpassword

    Mac OS设置rootpassword

  • Pycharm中Debug的基本用法和高级技巧

    Pycharm中Debug的基本用法和高级技巧今天测试自己写的代码,测试了很多次都是实际结果与心里预测不相符,甚至一度怀疑Pycharm除了问题,哈哈。最后debug了一下,才发现是自己的操作问题才导致了错误的结果,看来Debug真的是个好侦探,让你不会乱怀疑。下面就和大家分享一下我在Pycharm上Debug的心得1.在Pycharm中打开一个.py文件,并设置断点鼠标左键单击箭头处需要设置断点的语句即可设置断点2.运行debug…

  • 多重共线性:python中利用statsmodels计算VIF和相关系数消除共线性

    多重共线性:python中利用statsmodels计算VIF和相关系数消除共线性多重共线性在python中的解决方法本文将讨论多重共线性的相关概念及利用python自动化消除多重共线性的方法,以供参考,欢迎拍砖线性模型与非线性模型关于线性模型与非线性模型的定义,似乎并没有确切的定论,但是个人认为建模首先得清楚地认识样本,样本有线性可分与线性不可分两种,所谓是否线性可分,是指是否存在一条直线(或平面)将样本分开。上图中y=0和y=1的样本可以由一条直线分开,如逻辑回归…

  • 什么是SQL游标?[通俗易懂]

    什么是SQL游标?[通俗易懂]1.1游标的概念游标(Cursor)它使用户可逐行访问由SQLServer返回的结果集。使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。用SQL语言从数据库中检索数据

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号