18位身份证号校验
<?phpclass Str {public static function isIdCard($s) {$n = strlen($s);if ($n != 18) {return false;}// 加權(quán)因子$wi = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);// 校驗碼串$ai = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');$sigma = 0;for ($i = 0; $i < $n-1; $i++) {// 提取前17位的其中一位,并將變量類型轉(zhuǎn)為實數(shù)$b = ord($s[$i])-48;// 提取相應(yīng)的加權(quán)因子$w = $wi[$i];// 把從身份證號碼中提取的一位數(shù)字和加權(quán)因子相乘,并累加$sigma += $b * $w;}// 計算序號$serial = $sigma % 11;// 按照序號從校驗碼串中提取相應(yīng)的字符$checksum = $ai[$serial];return $s[$i] == $checksum;}
}$b = Str::isIdCard("420983***********1");
var_dump($b);
相關(guān)文章:
js身份證號驗證
總結(jié)
- 上一篇: 澳大利亚:令人钦羡的高福利国家 - 老牛
- 下一篇: 一台服务器 运行虚拟机吗,(原创)关于一