JS验证身份证号是否合法

demo代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <input type="text" name="idcard" id="idcard">
    <span></span>
</body>
</html>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(function () {

    $("#idcard").on('blur',function () {
        var idcard = $(this).val();          // 身份证号字符串
        idcardArr = idcard.split('');                          // 分割成身份证号数组
        var _length = idcardArr.length;                        // 身份证号长度
        var arr = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];    // 加权因子(不可变)
        var yan = [1,0,'X',9,8,7,6,5,4,3,2];                       // 校验码    (不可变)
        var str = 0;
        for (var i = 0; i < _length-1; i++) {
            str = parseInt(str+idcard[i]*arr[i]);                  // 计算求和
        }
        var _yu = str % 11;                                             // 取余
        var _lastnum = yan[_yu];                                   // 最后一位数

        if (idcardArr[_length-1] == _lastnum) {    // 判断是否相同
            $(this).next().html('<font color=green>√</font>');
            return true;
        }else{
            $(this).next().html('<font color=red size=2>×</font>');
            return false;
        }

    })
})    
</script>

-------------------------------------------------------------------------------------------------

以下为php实现代码:

<?php
 $cardid="身份证号";
 $len=strlen($cardid);

 //加权
 $arr=array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
 $str=0;
for ($i=0; $i <$len-1 ; $i++) {
     $substr=substr($cardid,$i,1);

    $str=$str+$substr*$arr[$i];
}

 $str=$str%11;
 $array=array(0=>1,1=>0,2=>"x",3=>9,4=>8,5=>7,6=>6,7=>5,8=>4,9=>3,10=>2);
 $yu=$array[$str];
 if($yu==substr($cardid,17,18)){
    echo "正确";
 }else{
     echo "失败";
 }

原文地址:https://www.cnblogs.com/lpblogs/p/7289422.html