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

  1. /*
  2. check(ID)验证身份证号码
  3. 返回值:0 : "是正确的身份证号"
  4. 1 : "身份证校验不符合求和模11=1这个等式",
  5. 2 : "身份证最后一位校验位有误",
  6. 3 : "身份证位数不正确",
  7. 4 : "年份错误",
  8. 5 : "月份错误",
  9. 6 : "日错误"
  10.  
  11. */
  12.  
  13. function check(ID) {
  14. var ck = new IDCard();
  15. ck.check(ID);
  16. return ck.errNum;
  17. }
  18.  
  19. function IDCard(ID) {
  20. var me = this;
  21. this.checkCode = new Array(1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2);
  22. this.ID;
  23. this.errNum = 0;
  24. this.err = {
  25. 1 : "身份证校验不符合求和模11=1这个等式",
  26. 2 : "身份证最后一位校验位有误",
  27. 3 : "身份证位数不正确",
  28. 4 : "年份错误",
  29. 5 : "月份错误",
  30. 6 : "日错误"
  31. };
  32. this.err_msg = function() {
  33. return (0 !== this.errNum) ? this.err[this.errNum] : null;
  34. };
  35. this.check = function(ID) {
  36. this.errNum = 0;
  37. this.ID = ID;
  38. if (cardValidate()) {
  39. if (!aiCheck()) this.errNum = 1;
  40. if (!LastByteCheck()) this.errNum = 2;
  41. return (0 === this.errNum) ? true: false;
  42. } else {
  43. return false;
  44. }
  45. };
  46. function getNum(str) {
  47. var re = /^[0]*([0-9]*)$/;
  48. str.match(re);
  49. return parseInt(RegExp.$1,10);
  50. }
  51. //对身份证位数,出生日期,初步验证
  52. function cardValidate() {
  53. var re = /^[0-9x]{15,18}$/i;
  54. if (!re.test(me.ID)) {
  55. me.errNum = 7;
  56. return false;
  57. }
  58. if (15 == me.ID.length || 18 == me.ID.length) {
  59. var realLen = 0;
  60. if (18 == me.ID.length) realLen = 2;
  61. var year = parseInt(me.ID.substr(6, 2 + realLen),10);
  62. var month = getNum(me.ID.substr(8 + realLen, 2));
  63. var day = parseInt(me.ID.substr(10 + realLen, 2),10);
  64. if (4 == year.length) if (year < 1900 || year > 2050) me.errNum = 4;
  65. if (month < 1 || month > 12) me.errNum = 5;
  66. if (day < 1 || day > 31) me.errNum = 6;
  67. return 0 === me.errNum;
  68. } else {
  69. me.errNum = 3;
  70. return false;
  71. }
  72. }
  73. //总和模11应该等于1
  74. var aiCheck = function() {
  75. var sum = 0;
  76. for (var i = 1; i <= me.ID.length; i++) {
  77. var ai = me.ID.substr(me.ID.length - i, 1);
  78. ai = (ai.toLowerCase() == 'x') ? 10 : ai;
  79. var wi = Math.pow(2, i - 1) % 11;
  80. sum += parseInt(ai,10) * wi;
  81. }
  82. return 1 == sum % 11;
  83. };
  84. //最后一位校验,这个可以和aiCheck合在一起,减少一次循环
  85. var LastByteCheck = function() {
  86. var sum = 0;
  87. for (var i = 2; i <= me.ID.length; i++) {
  88. var ai = me.ID.substr(me.ID.length - i, 1);
  89. ai = (ai.toLowerCase() == 'x') ? 10 : ai;
  90. var wi = Math.pow(2, i - 1) % 11;
  91. sum += parseInt(ai,10) * wi;
  92. }
  93. var checkCodeIndex = sum % 11;
  94. var c = me.ID.substr(me.ID.length - 1, 1);
  95. //alert(c+"=="+me.checkCode[checkCodeIndex]);
  96. return c == me.checkCode[checkCodeIndex];
  97. };
  98. }

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. Exceptionless邮箱设置

    在web.config中配置邮箱: <system.net> <mailSettings> <smtp from="xxx@163.com"> ...

  2. Unity资源打包学习笔记(二)、如何实现高效的unity AssetBundle热更新

    转载请标明出处:http://www.cnblogs.com/zblade/ 0x01 目的 在实际的游戏开发中,对于游戏都需要进行打补丁的操作,毕竟,测试是有限的,而bug是无法预估的.那么在手游中 ...

  3. .NET CORE 中使用AutoMapper进行对象映射

    简介 AutoMapper uses a fluent configuration API to define an object-object mapping strategy. AutoMappe ...

  4. ES6躬行记(21)——类的继承

    ES6的继承依然是基于原型的继承,但语法更为简洁清晰.通过一个extends关键字,就能描述两个类之间的继承关系(如下代码所示),在此关键字之前的Man是子类(即派生类),而在其之后的People是父 ...

  5. k8s应用机密信息与配置管理(九)--技术流ken

    secret 应用启动过程中可能需要一些敏感信息,比如访问数据库的用户名密码或者秘钥.将这些信息直接保存在容器镜像中显然不妥,Kubernetes 提供的解决方案是 Secret. Secret 会以 ...

  6. 在嵌入式设备中使用 JavaScript 的前景

    by Conmajia PC上的JavaScript已经发展到ECMAScript 6(ES6),马上ES10都快出来了(虽然还是草案),但是硬件上的JS却很少听说.这几年手持设备/可穿戴设备的发展非 ...

  7. shared_ptr和动态数组

    std::shared_ptr智能指针是c++11一个相当重要的特性,可以极大地将开发者从资源申请/释放的繁重劳动中解放出来. 然而直到c++17前std::shared_ptr都有一个严重的限制,那 ...

  8. C# 把字符串类型日期转换为日期类型(转载)

    C# 把字符串类型日期转换为日期类型   来源:https://www.cnblogs.com/raincedar/p/7009243.html 方法一:Convert.ToDateTime(stri ...

  9. (详细)华为荣耀4X CHE-TL00H的usb调试模式在哪里打开的步骤

    每当我们使用PC通过数据线链上安卓手机的时候,如果手机没有开启usb开发者调试模式,PC则没能成功读到我们的手机,有时,我们使用的一些功能较强的工具好比之前我们使用的一个工具引号精灵,老版本就需要打开 ...

  10. rocketmq批量消息投递

    批量发送消息可提高传递小消息的性能.同时也需要满足以下特征 批量消息要求必要具有同一topic.相同消息配置 不支持延时消息 建议一个批量消息最好不要超过1MB大小 示例 小于1MB String t ...