身份证号码验证算法 (PHP JavaScript 代码)
时间:2015-7-17 19:13 作者:admin 分类: 技术文章
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 出生年月 中的 年 为两位, 且缺少 最后一位 校验码
身份证校验码的计算方法
计算最后一位校验码的具体步骤
- 17 号码 加权求和 注: 1-17位 加权因子分别为 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2
- 上一步所求的和 取模 (下面的 代码 用的是 取余)
- 上一步的 结果 0 - 10 分别对应 的 校验码 为 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2
判断身份证号码是否正确的 函数
下面是 判断身份证号码是否正确的 函数封装 分别为 PHP JS
传入 身份证号码 返回校验结果 true
false
/* 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];
}
原文出自简爱博客 http://www.gouji.org/?post=378 觉得不错 转载.如有不便,请联系管理员.