转的,比较完善的验证身份证号的代码

 /*
check(ID)验证身份证号码
返回值:0 : "是正确的身份证号"
1 : "身份证校验不符合求和模11=1这个等式",
2 : "身份证最后一位校验位有误",
3 : "身份证位数不正确",
4 : "年份错误",
5 : "月份错误",
6 : "日错误" */ function check(ID) {
var ck = new IDCard();
ck.check(ID);
return ck.errNum;
} function IDCard(ID) {
var me = this;
this.checkCode = new Array(1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2);
this.ID;
this.errNum = 0;
this.err = {
1 : "身份证校验不符合求和模11=1这个等式",
2 : "身份证最后一位校验位有误",
3 : "身份证位数不正确",
4 : "年份错误",
5 : "月份错误",
6 : "日错误"
};
this.err_msg = function() {
return (0 !== this.errNum) ? this.err[this.errNum] : null;
};
this.check = function(ID) {
this.errNum = 0;
this.ID = ID;
if (cardValidate()) {
if (!aiCheck()) this.errNum = 1;
if (!LastByteCheck()) this.errNum = 2;
return (0 === this.errNum) ? true: false;
} else {
return false;
}
};
function getNum(str) {
var re = /^[0]*([0-9]*)$/;
str.match(re);
return parseInt(RegExp.$1,10);
}
//对身份证位数,出生日期,初步验证
function cardValidate() {
var re = /^[0-9x]{15,18}$/i;
if (!re.test(me.ID)) {
me.errNum = 7;
return false;
}
if (15 == me.ID.length || 18 == me.ID.length) {
var realLen = 0;
if (18 == me.ID.length) realLen = 2;
var year = parseInt(me.ID.substr(6, 2 + realLen),10);
var month = getNum(me.ID.substr(8 + realLen, 2));
var day = parseInt(me.ID.substr(10 + realLen, 2),10);
if (4 == year.length) if (year < 1900 || year > 2050) me.errNum = 4;
if (month < 1 || month > 12) me.errNum = 5;
if (day < 1 || day > 31) me.errNum = 6;
return 0 === me.errNum;
} else {
me.errNum = 3;
return false;
}
}
//总和模11应该等于1
var aiCheck = function() {
var sum = 0;
for (var i = 1; i <= me.ID.length; i++) {
var ai = me.ID.substr(me.ID.length - i, 1);
ai = (ai.toLowerCase() == 'x') ? 10 : ai;
var wi = Math.pow(2, i - 1) % 11;
sum += parseInt(ai,10) * wi;
}
return 1 == sum % 11;
};
//最后一位校验,这个可以和aiCheck合在一起,减少一次循环
var LastByteCheck = function() {
var sum = 0;
for (var i = 2; i <= me.ID.length; i++) {
var ai = me.ID.substr(me.ID.length - i, 1);
ai = (ai.toLowerCase() == 'x') ? 10 : ai;
var wi = Math.pow(2, i - 1) % 11;
sum += parseInt(ai,10) * wi;
}
var checkCodeIndex = sum % 11;
var c = me.ID.substr(me.ID.length - 1, 1);
//alert(c+"=="+me.checkCode[checkCodeIndex]);
return c == me.checkCode[checkCodeIndex];
};
}

js检查身份证号是否正确的更多相关文章

  1. js验证身份证号,超准确

    js验证身份证号,超准确 看程序前先来了解下身份证号的构成:身份证号分为两种,旧的为15位,新的为18位.身份证15位编码规则:dddddd yymmdd xx p    其中 dddddd:地区码  ...

  2. JS校验身份证号的合法性

    前端表单中有身份证号的校验,下边是用JS来校验身份证号的合法性. 中国居民身份证号码编码规则 第一.二位表示省(自治区.直辖市.特别行政区). 第三.四位表示市(地级市.自治州.盟及国家直辖市所属市辖 ...

  3. Js 根据身份证号获取年龄-性别

    参考:http://www.tuicool.com/articles/J7r2ien 方式一: $scope.GetAgeAndSexByIDNum = function (IdCardNO) { / ...

  4. js从身份证号中获取出生日期和性别

    今天,在做移动端的项目中,按照设计稿的要求,是可以让用户自己输入出生日期的,我还很认真的用了刚刚知道的html5表单的日期类型,本想着终于不用日期插件就可以实现用户选择自己的出生日期了,可结果老大说, ...

  5. js 校验身份证号

    根据地区编码.身份证格式.18位身份证需要验证最后一位校验位 //校验身份证 function IdentityCodeValid(code) { var city = { 11: "北京& ...

  6. js验证身份证号

    /* * 身份证检测(格式.地区.生日.年龄范围) * code:检测字符串 rangeAge:年龄范围[格式为:25-55] * 返回值 0:为空 ,不为0则验证不通过 */ : : : : : : ...

  7. js 根据身份证号获取性别,年龄,等

    $(function(){        $("#corpOwnerIdno").blur(function(){          //获取输入身份证号码             ...

  8. JS通过身份证号获取生日、年龄、性别

    <script> function IdCard(UUserCard,num){ if(num==1){ //获取出生日期 birth=UUserCard.substring(6, 10) ...

  9. 身份证号正则校验(js校验+JAVA校验)

    js校验身份证号[15位和18位] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 3 ...

随机推荐

  1. ToastUtil【简单的Toast封装类】【未自定义Toast的显示风格】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 一个简单的Toast封装类. 效果图 API = 6.0 API = 4.4.2 代码分析 实现了不管我们触发多少次Toast调用, ...

  2. 阿里云Ubuntu下安装、配置权限和导入本地mongodb

    ---恢复内容开始--- 第一部分:首先先在Ubuntu下安装好mongodb,步骤如下: 首先我们需要借助远程管理工具链接到阿里云上的ubuntu系统,接着进行如下操作 一.导出软件源的公钥 sud ...

  3. 完美解决phpstudy安装后mysql无法启动(无需删除原数据库,无需更改任何配置,无需更改端口)直接共存

    PHPstudy与原Mysql兼容解决 一.前言 今天学习php,当然是要先安装好运行环境了,phpstyudy是一个运行php的集成环境, 一键安装对新手很友好,与时作为一个新手,便跟着教程安装了p ...

  4. EF Core利用Scaffold从根据数据库生成代码

    在EF6 之前的时代,如果需要从数据库中生成代码,是可以直接在界面上操作的,而到了EF Core的时代,操作方式又有更简便的方式了,我们只需要记住以下这条指令. Scaffold-DbContext ...

  5. Kafka、ActiveMQ、RabbitMQ、RocketMQ 区别以及高可用原理

    为什么使用消息队列 其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么? 面试官问你这个问题,期望的一个回答是说,你们公司有个什么业务场景,这个业务 ...

  6. 使用nginx搭建高可用,高并发的wcf集群

    很多情况下基于wcf的复杂均衡都首选zookeeper,这样可以拥有更好的控制粒度,但zk对C# 不大友好,实现起来相对来说比较麻烦,实际情况下,如果 你的负载机制粒度很粗糙的话,优先使用nginx就 ...

  7. Docker进阶之三:Docker应用场景

    场景一:节省项目环境部署时间 1.单项目打包 每次部署项目到测试.生产等环境,都要部署一大堆依赖的软件.工具,而且部署期间出现问题几率很大,不经意就花费了很长时间. Docker主要理念就是环境打包部 ...

  8. 以太坊工作原理之txpool详解

    txpool详解 交易池txpool作为区块链系统的重要组成部分,对系统的安全性和稳定性具有重要作用.功能可归纳为:交易缓存.交易验证和交易过滤. 基本介绍 交易分类和缓存 txpool主要包含两个重 ...

  9. .NET(C#、VB)移动开发——Smobiler平台控件介绍:TextTabBar控件

    TextTabBar控件 一.          样式一 我们要实现上图中的效果,需要如下的操作: 从工具栏上的“Smobiler Components”拖动一个TextTabBar控件到窗体界面上 ...

  10. .net 配置swagger

    第一步: 在nuget.org中查找Swashbuckle并下载 在nuget.org中查找Swagger.net.UI,并下载 第二步: 下载完之后,App_Start多了三个文件 Swagger. ...