ylbtech-Regexp-Utils:身份证号校验
1.返回顶部
1、方法
  1. var idCardNoUtil = {
  2. /*省,直辖市代码表*/
  3. provinceAndCitys: {
  4. 11: "北京",
  5. 12: "天津",
  6. 13: "河北",
  7. 14: "山西",
  8. 15: "内蒙古",
  9. 21: "辽宁",
  10. 22: "吉林",
  11. 23: "黑龙江",
  12. 31: "上海",
  13. 32: "江苏",
  14. 33: "浙江",
  15. 34: "安徽",
  16. 35: "福建",
  17. 36: "江西",
  18. 37: "山东",
  19. 41: "河南",
  20. 42: "湖北",
  21. 43: "湖南",
  22. 44: "广东",
  23. 45: "广西",
  24. 46: "海南",
  25. 50: "重庆",
  26. 51: "四川",
  27. 52: "贵州",
  28. 53: "云南",
  29. 54: "西藏",
  30. 61: "陕西",
  31. 62: "甘肃",
  32. 63: "青海",
  33. 64: "宁夏",
  34. 65: "新疆",
  35. 71: "台湾",
  36. 81: "香港",
  37. 82: "澳门",
  38. 91: "国外"
  39. },
  40.  
  41. /*每位加权因子*/
  42. powers: ["7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"],
  43.  
  44. /*第18位校检码*/
  45. parityBit: ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"],
  46.  
  47. /*性别*/
  48. genders: { male: "男", female: "女" },
  49.  
  50. /*校验地址码*/
  51. checkAddressCode: function (addressCode) {
  52. var check = /^[1-9]\d{5}$/.test(addressCode);
  53. if (!check) return false;
  54. if (idCardNoUtil.provinceAndCitys[parseInt(addressCode.substring(0, 2))]) {
  55. return true;
  56. } else {
  57. return false;
  58. }
  59. },
  60.  
  61. /*校验日期码*/
  62. checkBirthDayCode: function (birDayCode) {
  63. var check = /^[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))$/.test(birDayCode);
  64. if (!check) return false;
  65. var yyyy = parseInt(birDayCode.substring(0, 4), 10);
  66. var mm = parseInt(birDayCode.substring(4, 6), 10);
  67. var dd = parseInt(birDayCode.substring(6), 10);
  68. var xdata = new Date(yyyy, mm - 1, dd);
  69. if (xdata > new Date()) {
  70. return false;//生日不能大于当前日期
  71. } else if ((xdata.getFullYear() == yyyy) && (xdata.getMonth() == mm - 1) && (xdata.getDate() == dd)) {
  72. return true;
  73. } else {
  74. return false;
  75. }
  76. },
  77.  
  78. /*计算校检码*/
  79. getParityBit: function (idCardNo) {
  80. var id17 = idCardNo.substring(0, 17);
  81. /*加权 */
  82. var power = 0;
  83. for (var i = 0; i < 17; i++) {
  84. power += parseInt(id17.charAt(i), 10) * parseInt(idCardNoUtil.powers[i]);
  85. }
  86. /*取模*/
  87. var mod = power % 11;
  88. return idCardNoUtil.parityBit[mod];
  89. },
  90.  
  91. /*验证校检码*/
  92. checkParityBit: function (idCardNo) {
  93. var parityBit = idCardNo.charAt(17).toUpperCase();
  94. if (idCardNoUtil.getParityBit(idCardNo) == parityBit) {
  95. return true;
  96. } else {
  97. return false;
  98. }
  99. },
  100.  
  101. /*校验15位或18位的身份证号码*/
  102. checkIdCardNo: function (idCardNo) {
  103. //15位和18位身份证号码的基本校验
  104. var check = /^\d{15}|(\d{17}(\d|x|X))$/.test(idCardNo);
  105. if (!check) return false;
  106. //判断长度为15位或18位
  107. if (idCardNo.length == 15) {
  108. return idCardNoUtil.check15IdCardNo(idCardNo);
  109. } else if (idCardNo.length == 18) {
  110. return idCardNoUtil.check18IdCardNo(idCardNo);
  111. } else {
  112. return false;
  113. }
  114. },
  115.  
  116. //校验15位的身份证号码
  117. check15IdCardNo: function (idCardNo) {
  118. //15位身份证号码的基本校验
  119. var check = /^[1-9]\d{7}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}$/.test(idCardNo);
  120. if (!check) return false;
  121. //校验地址码
  122. var addressCode = idCardNo.substring(0, 6);
  123. check = idCardNoUtil.checkAddressCode(addressCode);
  124. if (!check) return false;
  125. var birDayCode = '19' + idCardNo.substring(6, 12);
  126. //校验日期码
  127. return idCardNoUtil.checkBirthDayCode(birDayCode);
  128. },
  129.  
  130. //校验18位的身份证号码
  131. check18IdCardNo: function (idCardNo) {
  132. //18位身份证号码的基本格式校验
  133. var check = /^[1-9]\d{5}[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}(\d|x|X)$/.test(idCardNo);
  134. if (!check) return false;
  135. //校验地址码
  136. var addressCode = idCardNo.substring(0, 6);
  137. check = idCardNoUtil.checkAddressCode(addressCode);
  138. if (!check) return false;
  139. //校验日期码
  140. var birDayCode = idCardNo.substring(6, 14);
  141. check = idCardNoUtil.checkBirthDayCode(birDayCode);
  142. if (!check) return false;
  143. //验证校检码
  144. return idCardNoUtil.checkParityBit(idCardNo);
  145. },
  146.  
  147. formateDateCN: function (day) {
  148. var yyyy = day.substring(0, 4);
  149. var mm = day.substring(4, 6);
  150. var dd = day.substring(6);
  151. return yyyy + '-' + mm + '-' + dd;
  152. },
  153.  
  154. //获取信息
  155. getIdCardInfo: function (idCardNo) {
  156. var idCardInfo = {
  157. gender: "", //性别
  158. birthday: "", // 出生日期(yyyy-mm-dd)
  159. province: idCardNoUtil.provinceAndCitys[parseInt(idCardNo.substring(0, 2))]
  160. };
  161. if (idCardNo.length == 15) {
  162. var aday = '19' + idCardNo.substring(6, 12);
  163. idCardInfo.birthday = idCardNoUtil.formateDateCN(aday);
  164. if (parseInt(idCardNo.charAt(14)) % 2 == 0) {
  165. idCardInfo.gender = idCardNoUtil.genders.female;
  166. } else {
  167. idCardInfo.gender = idCardNoUtil.genders.male;
  168. }
  169. } else if (idCardNo.length == 18) {
  170. var aday = idCardNo.substring(6, 14);
  171. idCardInfo.birthday = idCardNoUtil.formateDateCN(aday);
  172. if (parseInt(idCardNo.charAt(16)) % 2 == 0) {
  173. idCardInfo.gender = idCardNoUtil.genders.female;
  174. } else {
  175. idCardInfo.gender = idCardNoUtil.genders.male;
  176. }
  177.  
  178. }
  179. return idCardInfo;
  180. },
  181.  
  182. /*18位转15位*/
  183. getId15: function (idCardNo) {
  184. if (idCardNo.length == 15) {
  185. return idCardNo;
  186. } else if (idCardNo.length == 18) {
  187. return idCardNo.substring(0, 6) + idCardNo.substring(8, 17);
  188. } else {
  189. return null;
  190. }
  191. },
  192.  
  193. /*15位转18位*/
  194. getId18: function (idCardNo) {
  195. if (idCardNo.length == 15) {
  196. var id17 = idCardNo.substring(0, 6) + '19' + idCardNo.substring(6);
  197. var parityBit = idCardNoUtil.getParityBit(id17);
  198. return id17 + parityBit;
  199. } else if (idCardNo.length == 18) {
  200. return idCardNo;
  201. } else {
  202. return null;
  203. }
  204. }
  205. };
  206.  
  207. utils.idCardNoUtil = window.idCardNoUtil = idCardNoUtil;
2、调用方法
  1. if (!utils.idCardNoUtil.checkIdCardNo($("#CardNO").val())) {
  2. mui.toast("输入身份证格式不正确,请检查!");
  3. return false;
  4. }
3、
2.返回顶部
 
3.返回顶部
 
4.返回顶部
 
5.返回顶部
 
 
6.返回顶部
 
作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

Regexp-Utils:身份证号校验的更多相关文章

  1. 使用 python 进行身份证号校验

    使用 python 代码进行身份证号校验 先说,还有很多可以优化的地方. 1.比如加入15位身份证号的校验,嗯哼,15位的好像没有校验,那就只能提取个出生年月日啥的了. 2.比如判断加入地址数据库,增 ...

  2. 身份证号校验原理及JavaScript实现

          在网站中,总有各种各样的表单,用户使用表单来向服务器发送数据,进行交互. 然而,代代相传的经验是,永远不要信任用户的输入,一定要对数据进行验证.如果使用不经验证的表单,轻则会有大量无效提交 ...

  3. Javascript 香港身份证号校验

    <!DOCTYPE html> <html> <head> <title>香港身份证校验码计算</title> </head> ...

  4. java身份证号校验

    package com.pt.modules.contract.utils; import java.text.ParseException; import java.text.SimpleDateF ...

  5. 锋利的js之验证身份证号

    我们在做互联网网站时,注册个人资料时,经常要用到身份证号,我们需要对身份证进验证,不然别人随便输个号码就通过,让你感觉这个网站做得很shit. 身份证号是有规则的. 结构和形式 1.号码的结构  公民 ...

  6. Java实现身份证号码校验

    二话不说,直接上代码. package hope.identitycodecheck.demo; import java.text.DateFormat; import java.text.Simpl ...

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

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

  8. java中身份证号和的银行卡的深度校验

    一: 身份证号: package com.mobile.utils; import java.text.SimpleDateFormat; import java.util.Calendar; imp ...

  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. IE浏览器缓存导致Ajax请求失败

    在IE浏览器中通过Ajax请求后台的数据,如果Page请求是postback类型的,可能会导致Ajax请求失败的问题 我们都知道ajax能提高页面载入的速度主要的原因是通过ajax减少了重复数据的载入 ...

  2. SqlServer数据库基本用法

    . 利用T-SQL语句,创建数据库(工资管理数据库),要求如下: 数据库初始大小:3MB:文件大小按兆字节3MB自动增长,增长限制为:15MB: 数据库日志文件初始大小:1MB: 文件大小按百分比5% ...

  3. Android 解决toolbar标题不显示问题

    问题原因:toolbar的兼容性有问题 解决办法: setSupportActionBar(toolbar); toolbar使用步骤: 1.编写menu.xml 为了保持兼容需要这样写: andro ...

  4. 在MyEclipse中使用debug模式

     转:http://blog.csdn.net/competerh_programing/article/details/6773371 1, 首先在一个java文件中设断点,然后运行,当程序走到断点 ...

  5. aes加密算法的一个问题

    百度“delphi aes”出来的结果,千篇一律,都是相互转载,但是没有人发现EldoS, Alexander Ionov于1998-2001写的ElAes.pas代码,存在一个问题. 相同的key和 ...

  6. 杭电2061WA 01

    #include<stdio.h> struct mem { char s[50]; double c; double f; }; int main() { struct mem x[60 ...

  7. (转)RabbitMQ学习之路由(java)

    http://blog.csdn.net/zhu_tianwei/article/details/40887755 参考:http://blog.csdn.NET/lmj623565791/artic ...

  8. CDR中是否有图层,如何调出图层面板?

    什么是图层?如果有点PS基础的同学,应该会非常清楚这个概念,它是构成图像的重要组成单位,许多效果可以通过对层的直接操作而得到,并在当前图层操作时候不会影响到其他图层,所以在绘图的过程中有着很重要的作用 ...

  9. Django01 web http 基础

    一.内容回顾 1.python基础 2.网络编程 3.并发编程 4.前端 5.数据库(MySQL) 二.今日概要 1.了解Web应用程序的本质 2.Django简介及安装使用 三.今日详细 1.最简单 ...

  10. 自定义View(未完待续)

    一.概述 android提供了丰富的系统控件,但在实际开发中,这些控件依然不能完全覆盖我们的需求.有时,我们需要自定义控件来满足一些个性化产品需求.自定义控件,主要有以下三种方式: 继承现有控件,对其 ...