javascript 判断一个数字是不是身份证号

<script type="text/javascript">
    //
    // javascript 判断一个数字是不是身份证号
    // 代码摘自 http: //topic.csdn.net/u/20110102/22/e79df4e8-7b0a-4c65-9490-1ef39837ff36.html?8841
    function isChinaIDCard(StrNo) {
        StrNo = StrNo.toString()
        if (StrNo.length == 18) {
            var a, b, c
            if (!isInteger(StrNo.substr(0, 17))) { return false }
            a = parseInt(StrNo.substr(0, 1)) * 7 + parseInt(StrNo.substr(1, 1)) * 9 + parseInt(StrNo.substr(2, 1)) * 10;
            a = a + parseInt(StrNo.substr(3, 1)) * 5 + parseInt(StrNo.substr(4, 1)) * 8 + parseInt(StrNo.substr(5, 1)) * 4;
            a = a + parseInt(StrNo.substr(6, 1)) * 2 + parseInt(StrNo.substr(7, 1)) * 1 + parseInt(StrNo.substr(8, 1)) * 6;
            a = a + parseInt(StrNo.substr(9, 1)) * 3 + parseInt(StrNo.substr(10, 1)) * 7 + parseInt(StrNo.substr(11, 1)) * 9;
            a = a + parseInt(StrNo.substr(12, 1)) * 10 + parseInt(StrNo.substr(13, 1)) * 5 + parseInt(StrNo.substr(14, 1)) * 8;
            a = a + parseInt(StrNo.substr(15, 1)) * 4 + parseInt(StrNo.substr(16, 1)) * 2;
            b = a % 11;
 
            if (b == 2)    //最后一位为校验位  
            {
                c = StrNo.substr(17, 1).toUpperCase();    //转为大写X  
            }
            else {
                c = parseInt(StrNo.substr(17, 1));
            }
 
            switch (b) {
                case 0: if (c != 1) { alert("身份证好号码校验位错:最后一位应该为:1"); return false; } break;
                case 1: if (c != 0) { alert("身份证好号码校验位错:最后一位应该为:0"); return false; } break;
                case 2: if (c != "X") { alert("身份证好号码校验位错:最后一位应该为:X"); return false; } break;
                case 3: if (c != 9) { alert("身份证好号码校验位错:最后一位应该为:9"); return false; } break;
                case 4: if (c != 8) { alert("身份证好号码校验位错:最后一位应该为:8"); return false; } break;
                case 5: if (c != 7) { alert("身份证好号码校验位错:最后一位应该为:7"); return false; } break;
                case 6: if (c != 6) { alert("身份证好号码校验位错:最后一位应该为:6"); return false; } break;
                case 7: if (c != 5) { alert("身份证好号码校验位错:最后一位应该为:5"); return false; } break;
                case 8: if (c != 4) { alert("身份证好号码校验位错:最后一位应该为:4"); return false; } break;
                case 9: if (c != 3) { alert("身份证好号码校验位错:最后一位应该为:3"); return false; } break;
                case 10: if (c != 2) { alert("身份证好号码校验位错:最后一位应该为:2"); return false }
            }
        }
        else    //15位身份证号  
        {
            if (!isInteger(StrNo)) { alert("身份证号码错误,前15位不能含有英文字母!"); return false }
        }
 
 
 
        switch (StrNo.length) {
            case 15: return true;
 
            case 18: return true;
 
        }
        alert("输入的身份证号码必须为15位或者18位!");
        return false;
    }  
 
 
</script>

posted @   梦幻泡影  阅读(887)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示