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 出生年月 中的 年 为两位, 且缺少 最后一位 校验码
计算最后一位校验码的具体步骤
下面是 判断身份证号码是否正确的 函数封装 分别为 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];
}