1. var idCardNoUtil = {
  2. provinceAndCitys: {11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",
  3. 31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",
  4. 45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",
  5. 65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"},
  6.  
  7. powers: ["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"],
  8.  
  9. parityBit: ["1","0","X","9","8","7","6","5","4","3","2"],
  10.  
  11. genders: {male:"男",female:"女"},
  12.  
  13. checkAddressCode: function(addressCode){
  14. var check = /^[1-9]\d{5}$/.test(addressCode);
  15. if(!check) return false;
  16. if(idCardNoUtil.provinceAndCitys[parseInt(addressCode.substring(0,2))]){
  17. return true;
  18. }else{
  19. return false;
  20. }
  21. },
  22.  
  23. checkBirthDayCode: function(birDayCode){
  24. var check = /^[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))$/.test(birDayCode);
  25. if(!check) return false;
  26. var yyyy = parseInt(birDayCode.substring(0,4),10);
  27. var mm = parseInt(birDayCode.substring(4,6),10);
  28. var dd = parseInt(birDayCode.substring(6),10);
  29. var xdata = new Date(yyyy,mm-1,dd);
  30. if(xdata > new Date()){
  31. return false;//生日不能大于当前日期
  32. }else if ( ( xdata.getFullYear() == yyyy ) && ( xdata.getMonth () == mm - 1 ) && ( xdata.getDate() == dd ) ){
  33. return true;
  34. }else{
  35. return false;
  36. }
  37. },
  38.  
  39. getParityBit: function(idCardNo){
  40. var id17 = idCardNo.substring(0,17);
  41. var power = 0;
  42. for(var i=0;i<17;i++){
  43. power += parseInt(id17.charAt(i),10) * parseInt(idCardNoUtil.powers[i]);
  44. }
  45. var mod = power % 11;
  46. return idCardNoUtil.parityBit[mod];
  47. },
  48.  
  49. checkParityBit: function(idCardNo){
  50. var parityBit = idCardNo.charAt(17).toUpperCase();
  51. if(idCardNoUtil.getParityBit(idCardNo) == parityBit){
  52. return true;
  53. }else{
  54. return false;
  55. }
  56. },
  57.  
  58. checkIdCardNo: function(idCardNo){
  59. //15位和18位身份证号码的基本校验
  60. var check = /^\d{15}|(\d{17}(\d|x|X))$/.test(idCardNo);
  61. if(!check) return false;
  62. //判断长度为15位或18位
  63. if(idCardNo.length==15){
  64. return idCardNoUtil.check15IdCardNo(idCardNo);
  65. }else if(idCardNo.length==18){
  66. return idCardNoUtil.check18IdCardNo(idCardNo);
  67. }else{
  68. return false;
  69. }
  70. },
  71.  
  72. //校验15位的身份证号码
  73. check15IdCardNo: function(idCardNo){
  74. //15位身份证号码的基本校验
  75. 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);
  76. if(!check) return false;
  77. //校验地址码
  78. var addressCode = idCardNo.substring(0,6);
  79. check = idCardNoUtil.checkAddressCode(addressCode);
  80. if(!check) return false;
  81. var birDayCode = '19' + idCardNo.substring(6,12);
  82. //校验日期码
  83. return idCardNoUtil.checkBirthDayCode(birDayCode);
  84. },
  85.  
  86. //校验18位的身份证号码
  87. check18IdCardNo: function(idCardNo){
  88. //18位身份证号码的基本格式校验
  89. 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);
  90. if(!check) return false;
  91. //校验地址码
  92. var addressCode = idCardNo.substring(0,6);
  93. check = idCardNoUtil.checkAddressCode(addressCode);
  94. if(!check) return false;
  95. //校验日期码
  96. var birDayCode = idCardNo.substring(6,14);
  97. check = idCardNoUtil.checkBirthDayCode(birDayCode);
  98. if(!check) return false;
  99. //验证校检码
  100. return idCardNoUtil.checkParityBit(idCardNo);
  101. },
  102.  
  103. formateDateCN: function(day){
  104. var yyyy =day.substring(0,4);
  105. var mm = day.substring(4,6);
  106. var dd = day.substring(6);
  107. return yyyy + '-' + mm +'-' + dd;
  108. },
  109.  
  110. //获取信息
  111. getIdCardInfo: function(idCardNo){
  112. var idCardInfo = {
  113. gender:"", //性别
  114. birthday:"" // 出生日期(yyyy-mm-dd)
  115. };
  116. if(idCardNo.length==15){
  117. var aday = '19' + idCardNo.substring(6,12);
  118. idCardInfo.birthday=idCardNoUtil.formateDateCN(aday);
  119. if(parseInt(idCardNo.charAt(14))%2==0){
  120. idCardInfo.gender=idCardNoUtil.genders.female;
  121. }else{
  122. idCardInfo.gender=idCardNoUtil.genders.male;
  123. }
  124. }else if(idCardNo.length==18){
  125. var aday = idCardNo.substring(6,14);
  126. idCardInfo.birthday=idCardNoUtil.formateDateCN(aday);
  127. if(parseInt(idCardNo.charAt(16))%2==0){
  128. idCardInfo.gender=idCardNoUtil.genders.female;
  129. }else{
  130. idCardInfo.gender=idCardNoUtil.genders.male;
  131. }
  132.  
  133. }
  134. return idCardInfo;
  135. },
  136.  
  137. getId15:function(idCardNo){
  138. if(idCardNo.length==15){
  139. return idCardNo;
  140. }else if(idCardNo.length==18){
  141. return idCardNo.substring(0,6) + idCardNo.substring(8,17);
  142. }else{
  143. return null;
  144. }
  145. },
  146.  
  147. getId18: function(idCardNo){
  148. if(idCardNo.length==15){
  149. var id17 = idCardNo.substring(0,6) + '19' + idCardNo.substring(6);
  150. var parityBit = idCardNoUtil.getParityBit(id17);
  151. return id17 + parityBit;
  152. }else if(idCardNo.length==18){
  153. return idCardNo;
  154. }else{
  155. return null;
  156. }
  157. }
  158. };
  159. //验证护照是否正确
  160. function checknumber(number){
  161. var str=number;
  162. //在JavaScript中,正则表达式只能使用"/"开头和结束,不能使用双引号
  163. var Expression=/(P\d{7})|(G\d{8})/;
  164. var objExp=new RegExp(Expression);
  165. if(objExp.test(str)==true){
  166. return true;
  167. }else{
  168. return false;
  169. }
  170. };

js身份证验证代码的更多相关文章

  1. 一个完整的 JS 身份证校验代码

    一个完整的 JS 身份证校验代码 身份证号码是由 18 位数字组成的,它们分别表示: (1) 前 1.2 位数字表示: 所在省份的代码; (2) 第 3.4 位数字表示: 所在城市的代码; (3) 第 ...

  2. 【原创】贡献一个项目中用到的js身份证验证-超级准!!!

    前言 百度百科解释:身份证号码 首先贡献一个大神的链接:js验证身份证超准 代码 function checkIdcard(idcard) { var Errors = new Array( &quo ...

  3. js身份证验证类

    var IDCard = function () { //---------------------------------------------------------- // 功能:根据身份证号 ...

  4. js身份证验证-超级准!!!

    function checkIdcard(idcard) { var Errors = new Array( "验证通过!", "身份证号码位数不对!", &q ...

  5. JS前端验证代码

    手机号码正则表达式验证: function checkPhone(){ var phone = document.getElementById('phone').value; if(!(/^1[345 ...

  6. JS身份证验证

    window.checkIdcard = function (idcard) { var errors = new Array( "yes", "请检查输入的证件号码是否 ...

  7. 身份证验证JS代码

    身份证验证JS程序function checkidcardfun(code) { var city = {11: "北京", 12: "天津", 13: &qu ...

  8. 表单验证代码实例:jquery.validate.js表单验证插件

    jquery.validate.js是JQuery旗下的一个验证插件,借助JQuery的优势,我们可以迅速验证一些常见的输入,并且可以自己扩充自己的验证方法.使用前请先下载必要的JQuery插件:jq ...

  9. js 常用正则表达式表单验证代码

    正则表达式使用详解 简介 简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具.其作用如下:测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一 ...

随机推荐

  1. (转)server.urlencode有什么用?怎么用?

    这个函数主要是为了,不同浏览器的事,如果你传递的参数是中文,有的浏览器就显示出错,如果转换成编码形式,就可以正确传递!当然在IE下2个结果都是一样的,你看不出来区别,用编码来传递参数是一个好习惯,养成 ...

  2. MySQL 表子查询

    MySQL 表子查询 表子查询是指子查询返回的结果集是 N 行 N 列的一个表数据. MySQL 表子查询实例 下面是用于例子的两张原始数据表: article 表: aid title conten ...

  3. 解决使用angularjs时页面因为{{ }}闪烁的两种方式ng-bind,ng-cloak

    1.HTML加载含有{{ }}语法的元素后并不会立刻渲染它们,导致未渲染内容闪烁(Flash of Unrendered Content,FOUC).我可以用ng-bind将内容同元素绑定在一起避免F ...

  4. java中的hashcode方法作用以及内存泄漏问题

    本文装载:http://hi.baidu.com/iduany/item/6d66dfc9d5f2da1650505870 hashCode()方法的作用&使用分析 一直以来都想写篇文章来说明 ...

  5. HTML5 canvas 中的线条样式

    线条样式属性 lineCap        设置或返回线条的结束端点样式 butt         默认.向线条的每个末端添加平直的边缘. round         向线条的每个末端添加圆形线帽. ...

  6. Python自动化运维之10、模块之json、pickle、XML、PyYAML、configparser、shutil

    序列化 Python中用于序列化的两个模块 json     用于[字符串]和 [python基本数据类型] 间进行转换 pickle   用于[python特有的类型] 和 [python基本数据类 ...

  7. c语言实现BMP图像转换为灰度图

    当初是自己要装X,非要用c来写信息隐藏作业,装了X,就得付出实践.查了好久资料,到期末才把作业交了,这里总结一下. 这道题是将真彩图转换为灰度图. 关于BMP文件结构,这是困扰了我好久的问题,上网查了 ...

  8. CSS定位属性Position详解

    CSS中最常用的布局类属性,一个是Float(CSS浮动属性Float详解),另一个就是CSS定位属性Position. 1. position:static 所有元素的默认定位都是:position ...

  9. Gridview中修改某列的背景色

    Gridview中状态列的值是1,某列的背景是是绿色状态字段是:archivesStatus protected void gvInfo_RowDataBound(object sender, Gri ...

  10. 关于Android读取不同位置(drawable,asset,SDCard)的图片资源的总结

    方式一: 已将图片保存到drawable目录下,通过图片id获得Drawable或者Bitmap,此方式最常用.(若只知道图片的名称,还可以通过图片的名称获得图片的id) (1)通过图片id获得Dra ...