<?php
/**
*身份证规则说明:
*①1-2 升级行政区代码
*②3-4 地级行政区划分代码
*③5-6 县区行政区分代码
*④7-10 11-12 13-14 出生年、月、日
*⑤15-17 顺序码,同一地区同年、同月、同日出生人的编号,奇数是男性,偶数是女性
*⑥18 校验码,如果是0-9则用0-9表示,如果是10则用X(罗马数字10)表示
*/
$arr = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
$result = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]; //余数参照表,最后一位校验码
$code = trim($_GET['code']);
$count = 0;
foreach ($arr as $key => $val) {
$num = substr($code, $key, 1);
$count += $num * $val;
if($key == 16)
$sex = intval($num%2==0)+1; //$sex 1男 2女
}
$n = intval($count % 11);
$a = substr($code, -1, 1);
if (!in_array($n, array_flip($result)) || $result[$n] != strtoupper($a)) {
die('身份证不合法');
}
echo '合法';