Java--身份证号校验
身份证号工具类
package nc.bs.foundation.util;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;/** * 身份证号工具类* */
public class IdentificationCodeUtil { public static final int IDENTITYCODE_OLD = 15; // 老身份证15位 public static final int IDENTITYCODE_NEW = 18; // 新身份证18位 public static int[] Wi = new int[17]; /** * 判断身份证号码是否正确。 * * @param code * 身份证号码。 * @return 如果身份证号码正确,则返回true,否则返回false。 */ public static boolean isIdentityCode(String code) { if (code == null || "".equals(code.trim())) { return false; } String birthDay = ""; code = code.trim(); // 长度只有15和18两种情况 if ((code.length() != IDENTITYCODE_OLD) && (code.length() != IDENTITYCODE_NEW)) { return false; } // 身份证号码必须为数字(18位的新身份证最后一位可以是x) Pattern pt = Pattern.compile("\\d{15,17}([\\dxX]{1})?"); Matcher mt = pt.matcher(code); if (!mt.find()) { return false; } // 验证生日 if (code.length() == IDENTITYCODE_OLD) { birthDay = "19" + code.substring(6, 12); } else { birthDay = code.substring(6, 14); } try {new SimpleDateFormat("yyyyMMdd").parse(birthDay);} catch (ParseException e) {return false;}
// if (!TimeUtil.isRightDate(birthDay, "yyyyMMdd")) {
// return false;
// } // 最后一位校验码验证 if (code.length() == IDENTITYCODE_NEW) { String lastNum = getCheckFlag(code.substring(0, IDENTITYCODE_NEW - 1)); // check last digit if (!("" + code.charAt(IDENTITYCODE_NEW - 1)).toUpperCase().equals( lastNum)) { return false; } } return true; } /** * 获取新身份证的最后一位:检验位 * * @param code * 18位身份证的前17位 * @return 新身份证的最后一位 */ private static String getCheckFlag(String code) { int[] varArray = new int[code.length()]; String lastNum = ""; int numSum = 0; // 初始化位权值 setWiBuffer(); for (int i = 0; i < code.length(); i++) { varArray[i] = new Integer("" + code.charAt(i)).intValue(); varArray[i] = varArray[i] * Wi[i]; numSum = numSum + varArray[i]; } int checkDigit = 12 - numSum % 11; switch (checkDigit) { case 10: lastNum = "X"; break; case 11: lastNum = "0"; break; case 12: lastNum = "1"; break; default: lastNum = String.valueOf(checkDigit); } return lastNum; } /** * 初始化位权值 */ private static void setWiBuffer() { for (int i = 0; i < Wi.length; i++) { int k = (int) Math.pow(2, (Wi.length - i)); Wi[i] = k % 11; } } /** * 判别是否字符串为null或者没有内容,或者全部为空格。 */ public static boolean empty(String o) { return ((null == o) || (o.length() <= 0) || (o.trim().equals(""))); } /** * 将15位身份证号码升级为18位身份证号码 * * @param code * 15位身份证号码 * @return 18位身份证号码 */ public static String update2eighteen(String code) { if (code == null || "".equals(code.trim())) { return ""; } code = code.trim(); if (code.length() != IDENTITYCODE_OLD || !isIdentityCode(code)) { return ""; } code = code.substring(0, 6) + "19" + code.substring(6); // code = code + getCheckFlag(code); return code; } /*** 还原15位身份证号码* @param code* @return*/public static String resume2fifteen(String code){if (code == null || "".equals(code.trim())) { return ""; } code = code.trim(); // if (code.length() != IDENTITYCODE_NEW || !isIdentityCode(code)) {
// return "";
// } if (code.length() != IDENTITYCODE_NEW ) { return ""; } StringBuffer codebuffer = new StringBuffer(code);codebuffer.delete(6, 8);codebuffer.deleteCharAt(codebuffer.length() -1 );return codebuffer.toString(); }public static void main(String[] args){ String[] codeArray = new String[]{"62272219850510261x","53010119810602007x","53010119810602001x"}; for(int i= 0;i<codeArray.length;i++){ if(isIdentityCode(codeArray[i])){ System.out.println(codeArray[i]+":为正确的身份证号码!"); }else{ System.out.println(codeArray[i]+":为错误的身份证号码!"); } } System.out.println("转换后的身份证号码为:"+update2eighteen("330521820721052"));; System.out.println("转换后的身份证号码为:"+resume2fifteen("62272219850510261x"));; } }
Java--身份证号校验相关推荐
- Java身份证号校验
面向百度编程 package com.sinosoft.lf.util.common;import java.text.SimpleDateFormat; import java.util.Date; ...
- C语言基础入门48篇_26_身份证号校验程序(以身份证的校验方式是实例加深对数组及函数封装的理解、字符-‘0‘得到字符对应的int类型数字)
本篇根据以二代身份证的校验方式是实例加深对数组及函数封装的理解 1. 第二代身份证号的组成 第二代身份证号为18位,各位数字对应了不同的信息(以下顺序从左往右): AABBCCYYYYMMDDXXXV ...
- 用Python进行身份证号校验
在日常应用中,经常需要输入身份证号,因为号码较长容易录错,因此需要进行实时校验,以尽可能保证输入正确.以下以Python为例,浅聊身份证号码校验的方法. 首先我们需要了解身份证号各个号段的意义.身份证 ...
- 最牛js身份证号校验方法
最牛js身份证号校验方法: function IdCodeValid(code){ //身份证号合法性验证 //支持15位和18位身份证号 //支持地址编码.出生日期.校验位验证 var city={ ...
- 使用 python 进行身份证号校验
使用 python 代码进行身份证号校验 先说,还有很多可以优化的地方. 1.比如加入15位身份证号的校验,嗯哼,15位的好像没有校验,那就只能提取个出生年月日啥的了. 2.比如判断加入地址数据库,增 ...
- 【Java】二代身份证号校验的工具类Java代码可直接使用
这是校验身份证合法性的工具类,需要的同学可以直接复制粘贴去用,没有其他依赖. package com.gaby.commons.util;import java.text.ParseException ...
- Java身份证号脱敏、校验身份证号合法性、根据身份证号获取年龄、根据生日获取年龄
这里写目录 身份证号编码规则 身份证号脱敏 身份证号合法性校验 根据身份证号获取年龄 根据生日日期获取年龄 根据身份证号获取年龄.生日的Map集合 身份证号编码规则 第一.二位表示省(自治区.直辖市. ...
- Java 身份证号验证
二代身份证号码验证 扯淡区: 本博客主要内容是利用Java语言来验证身份证号码是否符合18位的二代身份证号规范. 公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次 ...
- java 身份证正则校验工具类
import java.text.SimpleDateFormat; import java.util.Date;/** * 验证身份证号码 身份证号码, 可以解析身份证号码的各个字段, * 以及验证 ...
- 身份证号校验 excel比对
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateUtils;import j ...
最新文章
- 【CLR的执行模型:将源代码编译成托管模块】
- 智能车竞赛开启了新的一个周期,让我聚焦十六届赛题吧
- AD备份文件安装额外域控制器
- [bzoj3489]A simple rmq problem
- 如何做一个新产品的第一个版本:关于MVP和上线时间的权衡
- 手机端适配rem计算方法
- python django开发网站项目难吗_用django开发网站时遇到的问题
- 专为控制打印设计的CSS样式
- 图像旋转之以原点为中心
- ios开发快速入门教程
- 正则验证手机号码和邮箱格式
- Python学习第五弹【正则表达式】-kidult
- java使用itext导出pdf,图片、表格、背景图
- 信息规范和信息安全素养计算机,技师学院计算机专业学生信息安全意识培养的教学研究...
- java tiff 压缩_java – 多页Tiff压缩
- 五线谱上的Linux旋律
- 简单的车票管理系统(c语言)
- 用正则表达式将字符串中的下划线小写转换成大写
- 微信公众号自定义菜单如何添加emoji表情图标?
- 在xp系统电脑上建立宽带连接服务器吗,windows 7与windows xp创建宽带连接的方法-电脑教程...
热门文章
- 2019腾讯区块链白皮书(附完整版下载)
- TensorFlow基础(1)特点安装基本用法
- Android Studio连接手机设备教程(完全步骤)
- website for all kinds of courses
- c语言魔法阵原理,魔法阵构成理论及运行原理
- Java 生成13位条形码 Ean-13码规则:第十三位数字是前十二位数字经过计算得到的校验码。
- Exeinfo PE查壳工具
- CF1395A Boboniu Likes to Color Balls
- php反序列化漏洞 freebuf,入门Web需要了解的PHP反序列化漏洞
- 计算机网络的期刊,科学网—晒个自己整理的计算机网络和通信方向可能相关的期刊列表 - 张国强的博文...