<?php
$id = $_GET['id'];
if (empty($id)) {
$id = '640202198803060517';
}
//权重信息
$weight = [];
//身份证数字长度
$len = 18;
//计算权重信息
for ($i = 1; $i < $len; $i++) {
$exp = 18 - $i;
$weight[] = pow(2, $exp) % 11;
}
$wa = [];
//计算∑,相乘再相加
for ($i = 0; $i < $len - 1; $i++) {
$wa[] = $id{$i} * $weight[$i];
}
//取的校验和
$sum = array_sum($wa);
echo '校验和是:' . $sum . "<br />";
//计算校验位,MOD11-2 方法
$yu = (12 - $sum % 11) % 11;
//判断校验位是否合法
$last = $id{$len - 1};
if(strtolower($last) == 'x') {
$last = 10;
}
echo $yu == $last ? '身份证校验成功' : '身份证校验失败';
原文地址:https://segmentfault.com/a/1190000022106672