身份证号码验证算法 (PHP JavaScript 代码)

简爱未分类2015-7-17 18:4785330

18 位身份证号码结构

1-2 位省、自治区、直辖市代码
3-4 位地级市、盟、自治州代码
5-6 位县、县级市、区代码
7-14 位出生年月日,比如19670401代表1967年4月1日
15-17 位为顺序号,其中17位 为性别 男为单数,女为双数
18 位为校验码,0-9和X。作为尾号的校验码 (计算方法下面有)
举例:
130503 19070101 0013 这个身份证号的含义: 13为河北,05为邢台,03为桥西区,出生日期为1967年4月1日,顺序号为001 (1 性别 男),2为校验码。


15 位的身份证相比 18 出生年月 中的 年 为两位, 且缺少 最后一位 校验码

身份证校验码的计算方法

计算最后一位校验码的具体步骤

  1. 17 号码 加权求和 注: 1-17位 加权因子分别为 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2
  2. 上一步所求的和 取模 (下面的 代码 用的是 取余)
  3. 上一步的 结果 0 - 10 分别对应 的 校验码 为 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2


判断身份证号码是否正确的 函数

下面是 判断身份证号码是否正确的 函数封装 分别为 PHP JS

传入 身份证号码 返回校验结果 truefalse

/* PHP 验证 身份证号 */
function ckeckIdCard($id){
	static $codeArr = array(1,0,'X',9,8,7,6,5,4,3,2),
		$keyArr = array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
	$id = strtoupper($id);
	if(!preg_match('/^[\d]{17}[\dX]{1}$/', $id)) return false;

	$num = 0;
	for($i=0; $i<17; $i++){
		$num += $id[$i] * $keyArr[$i];
	}
	$key = $num % 11;
	return substr($id, -1) == $codeArr[$key];
}


/* JS 验证 身份证号 */
function ckeckIdCard($id){
	var $codeArr = [1,0,'X',9,8,7,6,5,4,3,2],
		$keyArr = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];
	$id = $id.toUpperCase();
	if(!/^[\d]{17}[\dX]{1}$/.test($id)) return false;

	$num = 0;
	for($i=0; $i<17; $i++){
		$num += $id[$i] * $keyArr[$i];
	}
	$key = $num % 11;
	return $id.slice(-1) == $codeArr[$key];
}




本文出自简爱博客,转载时请注明出处及相应链接。