php 身份证号码效验码生成函数

最近网站(天气预报15天查询)扩展添加身份证号码查询的便民功能,其在有一个关于身份证效验码的验证功能,在这里和大家分享!

首先要知道身份证的组成:

号码的结构: 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

18位身份证号码前17位相对是固定的,就是最后一位需要通过前17位按一定的算法生成!

校验码算法: 第十八位数,作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么 此人的身份证就变成了19位。X是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准

根据算法写出对应的功能函数:

<?php
function checkcode($idCard){
    $Wi = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1);    // 加权因子  
    $ValideCode = array(1, 0, X, 9, 8, 7, 6, 5, 4, 3, 2);            // 身份证验证位值.10代表X  
    for ( $i = 0; $i < 17; $i++) {  
        $sum += $Wi[$i] * $idCard[$i];            // 加权求和  
    }  
    $valCodePosition = $sum % 11;
    return $ValideCode[$valCodePosition];
}
?>

本功能函数是验证输入的18位身份证号码得到其真实有效的效验码!

实例运用:身份证号码查询(http://15tianqi.cn/sfz/)

对函数的返回码可进行身份证号最后一位比对是否正确!

你可能感兴趣的:(天气预报,出生日期,身份证号码,国家标准,地址码)