身份证号码中的校验码是身份证号码的最后一位,是根据〖中华人民共和国国家标准GB 11643-1999〗中有关公民身份号码的规定,

根据精密的计算公式计算出来的,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。
计算方法
1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 ;
2、将这17位数字和系数相乘的结果相加;
3、用加出来和除以11,看余数是多少;
4、余数只可能有0 1 2 3 4 5 6 7 8 9 10这11个数字。其分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2;
5、通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2;

例如:某男性的身份证号码是34052419800101001X。我们要看看这个身份证是不是合法的身份证。首先:我们计算3*7+4*9+0*10+5*5+...+1*2,前17位的乘积和是189

然后:

用189除以11得出的结果是商17余2最后:通过对应规则就可以知道余数2对应的数字是x。所以,这是一个合格的身份证号码。

js代码:

  1. 1 function check_id(){
  2. 2 var idcode= document.getElementById("IDNumber").value
  3. 3 // alert(idcode)
  4. 4 //检测身份证号码合法性---全部数字或数字+X/x 18位
  5. 5 // 加权因子
  6. 6 var weight_factor = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];
  7. 7 // 校验码
  8. 8 var check_code = ['1', '0', 'X' , '9', '8', '7', '6', '5', '4', '3', '2'];
  9. 9
  10. 10 var code = idcode + "";
  11. 11 var last = idcode[17];//最后一位
  12. 12
  13. 13 var seventeen = code.substring(0,17);
  14. 14
  15. 15 // ISO 7064:1983.MOD 11-2
  16. 16 // 判断最后一位校验码是否正确
  17. 17 var arr = seventeen.split("");
  18. 18 var len = arr.length;
  19. 19 var num = 0;
  20. 20 for(var i = 0; i < len; i++){
  21. 21 num = num + arr[i] * weight_factor[i];
  22. 22 }
  23. 23
  24. 24 // 获取余数
  25. 25 var resisue = num%11;
  26. 26 var last_no = check_code[resisue];
  27. 27
  28. 28 // 格式的正则
  29. 29 // 正则思路
  30. 30 /*
  31. 31 第一位不可能是0
  32. 32 第二位到第六位可以是0-9
  33. 33 第七位到第十位是年份,所以七八位为19或者20
  34. 34 十一位和十二位是月份,这两位是01-12之间的数值
  35. 35 十三位和十四位是日期,是从01-31之间的数值
  36. 36 十五,十六,十七都是数字0-9
  37. 37 十八位可能是数字0-9,也可能是X
  38. 38 */
  39. 39 var idcard_patter = /^[1-9][0-9]{5}([1][9][0-9]{2}|[2][0][0|1][0-9])([0][1-9]|[1][0|1|2])([0][1-9]|[1|2][0-9]|[3][0|1])[0-9]{3}([0-9]|[X])$/;
  40. 40
  41. 41 // 判断格式是否正确
  42. 42 var format = idcard_patter.test(idcode);
  43. 43 // alert(format)
  44. 44 // 返回验证结果,校验码和格式同时正确才算是合法的身份证号码
  45. 45 // return last === last_no && format ? true : false;
  46. 46 if(!(format==true && (last_no===last))){
  47. 47 alert("身份证号码格式输入有误!")
  48. 48 document.getElementById("IDNumber").focus();
  49. 49 }
  50. 50 }

JavaScript二代公民身份证号验证的更多相关文章

  1. 做一个牛XX的身份证号验证类(支持15位和18位)

    原文:做一个牛XX的身份证号验证类(支持15位和18位) #region 是否合法的中国身份证号码 protected bool IsChineseID() { if (str.Length == 1 ...

  2. php不用正则表达式实现身份证号验证详解

    写了一个身份证号验证类,php小白,写的不好,欢迎各位大神给我多提意见和建议 身份证号分为四部分,第一部分是前6位为地址码,7-14位是出生日期,15-17位是同一地方同一天出生的男孩为奇数,女孩是偶 ...

  3. 基于struts2框架-自定义身份证号验证器

    自定义拦截器的步骤: 1.定义一个验证器的类: > 自定义的验证器都需要实现 Validator接口.  > 可以选择继承 ValidatorSupport 或 FieldValidato ...

  4. Laravel 中自定义 手机号和身份证号验证

    首先在 Providers\AppServiceProvider.php 文件中自定义 手机号和身份证号验证 // AppServiceProvider.php 文件 <?php namespa ...

  5. 身份证号验证js程序

    最近注册一个网站,居然让我输入个人身份证号,身份证号是个人信息,怎么能告诉你呢? 输入正确的身份证号没有任何问题. 我就仅仅改了最后一位,就告诉我身份证号不对,你是怎么知道的呢?所以,搜了下身份证号的 ...

  6. input表单手机号、身份证号验证

    <form action="" method="post" onsubmit="return checkForm(this)"> ...

  7. 中国居民18位身份证号验证方法,Java算法实现

    public static boolean validate18Idcard(String idcard){ if(idcard == null ) { return false; } if(idca ...

  8. JavaScript 正则表单验证(用户名、密码、确认密码、手机号、座机号、身份证号)

    1.关于JavaScript表单验证,如果使用双向绑定的前端js框架,会更容易的多.但是博主还是建议大家不要脱离源生js本身.因为源生js才是王道. 注意: a.代码中的错误提示可能会没有,在代码中找 ...

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

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

  10. Android 正则表达式验证手机号、姓名(包含少数民族)、身份证号

    最近项目中新增的功能,需要对手机号.姓名.身份证号等一些信息进行验证,最好的方法是通过正则表达式来验证,网上查了一些资料,写了这几个工具方法. 1.验证手机号 规则:第一位只能是1,第二位为3-8中的 ...

随机推荐

  1. MinGW 和 MSVC

    在 Winodws 上编译通常会用到这两种工具链 MinGW(Minimalist GNU for Windows) 通常用于跨平台开发,可以编译出在 Windows 系统上运行的 .exe 程序 M ...

  2. 为什么Sync.Pool不需要加锁却能保证线程安全

    1. 简介 我们在 Sync.Pool: 提高go语言程序性能的关键一步 一文中,已经了解了使用sync.Pool来实现对象的复用以减少对象的频繁创建和销毁,以及使用sync.Pool的一些常见注意事 ...

  3. 一些Clion使用记录

    一些Clion使用记录 编译链设置 在设置"工具链"中可以按需增加不同的编译链 访问越界溢出debug AddressSanitizer介绍:AddressSanitizer 交的 ...

  4. springboot多数据源配置理解

    今天研究项目的多数据源配置,产生了一点疑惑,有很多地方没有指定数据源,那么spring如何知道连接哪一个呢?让我们从头开始梳理吧. 首先是数据源配类 其中使用到了两个数据源,项目采用读写分离,一个主库 ...

  5. 摆脱鼠标系列 - 打开微信(Alt+V) - 打开双核浏览器(Alt+S) - HotkeyP

    摆脱鼠标系列 - 打开微信(Alt+V) - 打开双核浏览器(Alt+S) - HotkeyP 新定义了两个快捷键 这两个比较常用

  6. vetur volar 是否可以共用,vue2 vue3项目 如何同时开发?

    vetur volar 是否可以共用,vue2 vue3项目 如何同时开发? 先提问 以后再找答案 20220704 补答 vetur volar 不要一起装 vscode环境

  7. Codeforces Round 858:B. Mex Master

    一.来源:Problem - B - Codeforces 二.题面 三.思路 题面:n个非负正数,随机排列并由相邻两个数相加构成n-1个数并进行升序排列,求从0开始的第一个MEX(Minimum E ...

  8. Jitpack发布Android库出现Direct local .aar file dependencies are not supported when building an AAR

    原文:Jitpack发布Android库出现Direct local .aar file dependencies are not supported when building an AAR - S ...

  9. day14--Java常用类之字符串相关类02

    Java常用类 2.字符串相关类 String.StringBuilder.StringBuffer类是三个字符串相关类. String类代表不可变字符序列,StringBuilder类和String ...

  10. 使用ConnectivityManager.bindProcessToNetwork绑定特殊网络

    最近测试那边提了一个bug,经过排查后发现其原因:是因为连接的Wi-Fi无法上网,因此在Android系统的多网络策略中,可以上网的SIM移动网络被设置为系统默认网络,投屏组件docker传输与反控模 ...