身份证第18位(校验码)的计算方法

  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。我们要看看这个身份证是不是合法的身份证。

  首先我们得出前17位的乘积和是189,然后用189除以11得出的结果是17+2/11,也就是说其余数是2。最后通过对应规则就可以知道余数2对应的数字是x。所以,可以判定这是一个合格的身份证号码。

import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** purpose: 身份证号码有效性验证* author : 永顺* date   : 2018-03-27 17:15*/
public class ShenFenZheng {public static void main(String[] args) {ShenFenZheng s = new ShenFenZheng();s.getShenFenZhengBollean("411322197505291935");}/*** 判断身份证号码是否合法** @param number* @return true为合法 false为不合法*/public boolean getShenFenZhengBollean(String number) {//获取身份证长度除去最后一位的长度int length = number.length() - 1;Boolean trueOrFalse = true;if (17 != length) {System.out.println("您输入的身份证号格式有误(身份证位数不正确),请检查后重新输入!");trueOrFalse = false;return trueOrFalse;}int[] array = new int[length];//求和int sum = 0;//余数int residue = -1;//余数对应校验数字char check = ' ';//最后一位字符char lastChar = number.charAt(length);for (int i = 0; i < length; i++) {//  array[i] = Integer.parseInt(String.valueOf(number.charAt(i)));if (!Character.isDigit(number.charAt(i))) {System.out.println("您输入的身份证号格式有误(前17位中存在非数字类型字符),请检查后重新输入!");trueOrFalse = false;return trueOrFalse;} else if (true == isSpecialChar(String.valueOf(lastChar))) {System.out.println("您输入的身份证号格式有误(第18位存在非法字符),请检查后重新输入!");trueOrFalse = false;return trueOrFalse;}int[] array2 = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};array[i] = Integer.parseInt(String.valueOf(number.charAt(i)));sum += array2[i] * array[i];//  System.out.println(sum);}residue = sum % 11;switch (residue) {case 0:check = '1';break;case 1:check = '0';break;case 2:check = 'X';break;case 3:check = '9';break;case 4:check = '8';break;case 5:check = '7';break;case 6:check = '6';break;case 7:check = '5';break;case 8:check = '4';break;case 9:check = '3';break;case 10:check = '2';break;}if (check != lastChar) {System.out.println("对不起,您查询的身份证号码非法!");trueOrFalse = false;} else {System.out.println("恭喜!您查询的身份证号码合法!");}//System.out.println(Arrays.toString(array));return trueOrFalse;}/*** 判断是否含有特殊字符** @param str* @return true为包含,false为不包含*/public static boolean isSpecialChar(String str) {String regEx = "[ _`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]|\n|\r|\t";Pattern p = Pattern.compile(regEx);Matcher m = p.matcher(str);return m.find();}
}

JAVA代码实现身份证18位校验码合法性校验相关推荐

  1. java字符串应用之18位身份证格式验证

    公民身份号码是特征组合码,由17位数字本体码和1位数字校验码组成.排列顺序从左至右依次为:6位数字地址码.8位数字出生日期码,3位数字顺序码和1位数字校验码.     地址码:表示编码对象常住户口所在 ...

  2. 公民身份号码是一种由18位数字组成的特征组合码,其排列顺序从左至右依次为:6位数字地址码、8位数字出生日期码,3位数字顺序码和1位数字校验码(校验码若为10则用字符X来表示)。编写程序从键盘输入一个

    #include <stdio.h> int main() {int add,year,month,day;/*定义地址码,年月日*/int shunxuma;/*定义顺序码*/char ...

  3. python crc-16 crc-16校验码 crc-16校验算法 ppp(MAC)帧检验序列FCS

    python crc-16 crc-16校验码 crc-16校验算法 ppp(MAC)帧检验序列FCS 想弄明白这里要看多几遍,配合下面的例子能更快理解. 第一.CRC-16校验码计算方法: 常用查表 ...

  4. 异或校验 java_Java生成异或校验码、和校验码、CRC校验码、补码求和校验码四种校验码及校验码匹配工具类...

    Java生成异或校验码.和校验码.CRC校验码.补码求和校验码四种校验码及校验码匹配工具类 /** * 报文校验码验证规则 */ public class Verification { /** * 校 ...

  5. Java:15位或18位居民身份证号码通用校验(正则表达式、日期格式、末尾校验码)

    身份证号码校验,正则表达式校验.日期格式校验.18位身份证末尾校验码校验 前六位省市县号码变更频繁,这里就不做校验 import java.text.ParseException; import ja ...

  6. java代码实现身份证第18位的计算和验证身份证号码是否是真实有效.

    一.身份证第18位(校验码)的计算方法 : 1.将前面的身份证号码17位数分别乘以不同的系数. 从第一位到第十七位的系数分别为: 7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2 ...

  7. java 代码实现身份证合法性校验(全国所有地方)

    很多地方可能都会用到对身份证要进行判断校验的功能,这个是之前在网上看到的,具体的网址都忘了,现在项目完成了,有时间把其整理下,方便自己和大家日后使用!(直接复制粘贴即可) package org.as ...

  8. vue中如何进行身份证合法性校验(身份证18位,包含最后一位数字/字母)

    文章目录 前言 正文 1. 首先,根据实际情况,目前我们使用的身份证由18位构成,包括数字和字母X.那么,在input输入框中就需要限制用户输入的数据类型. 2.其次,查看Element ui 组件库 ...

  9. 18位身份证校验-格式+合法性校验-复制即用

    public static void main(String[] args) {String pattern = "^[1-9]\\d{5}(19|20)\\d{2}(0[1-9]|1[0- ...

最新文章

  1. HashTable和HashMap的区别详解
  2. 程序员因中年危机从北京回老家事业单位:工资从60万爆降到6万
  3. Python 传值和传址 copy/deepcopy
  4. android 图标点击变大,使android桌面图标变大
  5. SCUT个人整理的常见问题
  6. java培训学费_参加java培训大概的费用是多少钱?
  7. HTML简单实例加表单的显示效果
  8. Undertow技术:为什么很多Spring Boot开发者放弃了Tomcat
  9. 去年的今天,我和小叶子完成了《阿猫阿狗2》,缅怀一下。
  10. [转]使用Visual C#制作可伸缩个性化窗体
  11. 人大副教授从细节上教你如何快速进行研究生早期的科研之路
  12. git操作本地仓库基本使用教程
  13. kali虚拟机安装教程(超详细)
  14. 用Tornado实现web聊天室(前端采用vue+bootstrap)
  15. 用 js判断 一个数是否是素数(质数)_js 基础算法题(二)
  16. 郭天祥的10天学会51单片机_第十节
  17. 商城项目 ------ 订单的生成功能(vue实现)
  18. 链接测试苹果手机软件,【苹果】苹果手机上如何使用免费观影软件?用TestFlight+某影视APP试试...
  19. python读取图片分辨率_Python 程序查找图像的大小(分辨率)
  20. 一款Excel导入导出解决方案组成的轻量级开源组件

热门文章

  1. SQL Server实例级别迁移上云
  2. html标签(2): a标签
  3. 如何使用Global Mapper提取一条线的高程值
  4. selenium.common.exceptions
  5. Hadoop所支持的几种压缩格式
  6. 生成Kindle可读的mobi和PDF电子书
  7. VoLTE 场景功耗测试
  8. 量化系统数据的频率-tick和挂单数据、日内Bars、分钟线、每日周月数据
  9. linux中btt工具详解
  10. 第52课:蘑菇云Spark大数据项目数据建模