- 浏览: 303668 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
u014212273:
好文一枚
log4j日志配置 -
向奕昌:
你好,能否提供下你那个测试dll
Java调用.dll文件 -
GARUDA183:
谢谢分享。
Flex中文帮助文档以及ActionScript3的中文文档 -
木叶之舟:
感谢楼主分享
Flex中文帮助文档以及ActionScript3的中文文档 -
游其是你:
呵呵,谢谢啦,好人一生平安~
Flex中文帮助文档以及ActionScript3的中文文档
身份证号码工具类
身份证号码规则
摘自百度:
[根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码。生日期码表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。顺序码表示同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。顺序码的奇数分给男性,偶数分给女性。校验码是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。下面举例说明该计算方法。]
身份证工具方法
中华人民共和国居民身份证由两种,一种是15位身份证号码,一种是18位身份证号码.
以下是总结了一些身份证常用方法.不是很完整.
package cn.com.jody.util; /** * 功能/模块:工具类<br> * 类描述:身份证工具类 * * @author JODY */ public class CardUtil { // 经过计算得出的指数数组,算法:2的n-1次方求和,除以11取模 // 如:2的0次方除以11取模=1,2的1次方除以11取模=2,2的2次方除以11取模=4 // 加权因子 static int[] wi = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 }; // 校验位数组 static char[] ai = { '1', '0', 'x', '9', '8', '7', '6', '5', '4', '3', '2' }; /** * 根据15位身份证号和出生日期计算得出18位身份证号 * * @param id15,15位身份证号 * @param birthday出生日期,19820329 * @return id18,返回18位身份证号 */ public static String id15To18Number(String id15, String birthday) { if (isNullEmpty(id15) || id15.length() != 15 || isNullEmpty(birthday) || birthday.length() != 8) { return null; } else { return id15.substring(0, 6) + birthday.substring(0, 2) + id15.substring(6) + ai[checkBit(id15, birthday)]; } } /** * 判断字符串是否为null或者长度是否为0 * * @param text * 字符串 * @return boolean */ public static boolean isNullEmpty(String text) { if (null == text) { return true; } else if (0 == text.length()) { return true; } return false; } /** * * 根据15位身份证号和出生日期,计算校验位 * * @param id15,15位身份证号 * @param birthday出生日期,19820329 * @return mod,第18位校验位,用于从ai数组取数作为身份证号的最后一位,即ai[mod] */ public static int checkBit(String id15, String birthday) { id15 = id15.substring(0, 6) + birthday.substring(0, 2) + id15.substring(6); int sum = 0; // 计算校验位,前17位加权求和,然后除以11取模 // S = Sum(Ai * Wi), i = 0, ... , 16 ,对前17位数字的权求和 // Ai:表示第i位置上的身份证号码数字值 // Wi:表示第i位置上的加权因子 for (int i = 1; i < id15.length() + 1; i++) { sum = sum + wi[i - 1] * (Integer.parseInt(id15.substring(i - 1, i))); } int mod = sum % 11; return mod; } /** * 根据传入的18位身份证号,计算校验位 * * @param id,18位身份证号 * @return mod,返回校验位,用于从ai数组取数作为身份证号的校验位,即ai[mod] */ public static int checkBit(String id) { String id17 = id.substring(0, 17); int sum = 0; for (int i = 0; i < id17.length(); i++) { int ai = Integer.parseInt(id17.substring(i, i + 1)); sum += wi[i] * ai; } int mod = sum % 11; return mod; } /** * 校验15位身份证号与出生日期 * * @param id,15位身份证号 * @param birthday,出生日期8位(19820329) * @return result */ public static boolean checkId15BirthDay(String id, String birthday) { boolean result = false; String birth_id = id.substring(6, 12);// 6位日期 String birth = birthday.substring(2); // 检验日期,出生日期与身份证中的出生日期相符,然后检验性别 if (birth_id.equals(birth)) { result = true; } else { // 出生日期与身份证中的出生日期不相符 result = false; } return result; } /** * 校验15位身份证号与性别 * * @param id,15位身份证号 * @param sex,性别, * 0-女 1-男 * @return result */ public static boolean checkId15Sex(String id, Integer sex) { boolean result = false; String temp = id.substring(14);// 最后一位代表性别 int isex = Integer.parseInt(temp); // 男为奇数,女为偶数 if (isex % 2 == sex) { result = true; } else { result = false; } return result; } /** * 校验18位身份证号 * * @param id,18位身份证号 * @param birthday,出生日期8位(19820329) * @param sex,性别, 0-女,1-男 * @return result */ public static boolean checkId18BirthDay(String id, String birthday) { boolean result = false; String birth_id = id.substring(6, 14);// 8位日期 // 检验日期,出生日期与身份证中的出生日期相符,然后检验性别 if (birth_id.equals(birthday)) { result = true; } else { // 出生日期与身份证中的出生日期不相符 result = false; } return result; } /** * 校验18位身份证号 * * @param id,18位身份证号 * @param birthday,出生日期8位(19820329) * @param sex,性别,0-女,1-男 * @return result */ public static boolean checkId18Sex(String id, Integer sex) { boolean result = false; String temp = id.substring(16, 17);// 倒数第二位代表性别 int isex = Integer.parseInt(temp); // 男为奇数,女为偶数 if (isex % 2 == sex) { result = true; } else { result = false; } return result; } /** * 获取18位身份证号的出生日期 * * @param id * @return */ public static String getId18Birthday(String id) { if (isNullEmpty(id) || id.length() != 18) return null; String birthday = id.substring(6, 14);// 8位日期; return birthday; } /** * 获取18位身份证号的性别 * * @param id * @return */ public static Integer getId18Sex(String id) { if (isNullEmpty(id) || id.length() != 18) return null; String temp = id.substring(16, 17);// 倒数第二位代表性别 int isex = Integer.parseInt(temp); // 男为奇数,女为偶数 // 性别 0-女 1-男 if (isex % 2 == 0) { return 0; } else { return 1; } } /** * 验证身份证号码是否正确 * * @param id,18位身份证号码 * @return true 正常,false 错误 */ public static boolean validId18(String id) { if (validId18IsNumber(id) && validId18IsBirthday(id) && validId18IsBit(id)) return true; else return false; } /** * 验证身份证字符是否为合法 * * @param id,18位身份证号码 * @return true 正常,false 错误 */ public static boolean validId18IsNumber(String id) { if (isNullEmpty(id) || id.length() != 18) return false; // 验证前17位是否为数字 for (int i = 0; i < 17; i++) { if (id.charAt(i) < '0' || id.charAt(i) > '9') return false; } return true; } /** * 验证身份证出生日期是否合法 * * @param id,18位身份证号码 * @return true 正常,false 错误 */ public static boolean validId18IsBirthday(String id) { if (isNullEmpty(id) || id.length() != 18) return false; // 验证出生日期 int y = Integer.parseInt(id.substring(6, 10)); int m = Integer.parseInt(id.substring(10, 12)); int d = Integer.parseInt(id.substring(12, 14)); if (y < 1900 || m < 1 || m > 12 || d < 1 || d > 31 || ((m == 4 || m == 6 || m == 9 || m == 11) && d > 30) || (m == 2 && ((y % 4 > 0 && d > 28) || d > 29))) return false; return true; } /** * 验证身份证验证数是否正确 * * @param id,18位身份证号码 * @return true 正常,false 错误 */ public static boolean validId18IsBit(String id) { if (isNullEmpty(id) || id.length() != 18) return false; // 验证身份证验证位 String bit = id.substring(17); String tbit = String.valueOf(ai[checkBit(id)]); if (!bit.equals(tbit)) return false; return true; } public static void main(String[] args) { System.out.println(CardUtil.validId18("43102819841s312434")); } }
- CardUtil.rar (1.9 KB)
- 下载次数: 35
发表评论
-
java源程序加密
2009-03-22 11:12 2064Java程序的源代码很容易 ... -
NoClassDefFoundError:org/jboss/mx/util/PropertyAcc
2009-01-15 17:14 4103在项目工程中,无故出现如下异常: java.lang.No ... -
JVM内存不足异常
2008-07-01 13:24 2472JVM内存不足异常 Web Server中布署项目,出现内 ... -
开发中一些常用的加密算法
2008-06-25 17:02 1332开发过程中常用的到的一些加密算法。 一般常用的有: MD5 ... -
Apache Ant包进行ZIP文件压缩
2008-05-27 00:47 4936Apache Ant包进行ZIP文件压 ... -
Oracle的varchar2(4000)插入汉字过长
2008-04-26 13:04 5493在使用oracle时,如果在一个varchar2(4000)的 ... -
定时执行任务的方法
2008-04-08 12:13 1929定时执行任务的三种方法: 1)java.util.Timer. ... -
JSP\Servlet中的Filter(过滤器)应用
2008-01-12 11:31 8051做B/S的企业级应用,可能会遇到这样一种情况,客户的文档(wo ... -
用get方法传递中文参数时出现乱码的解决方法
2007-12-28 11:04 4356可先用java.net.URLEncoder.encode(& ... -
Java调用.dll文件
2007-09-20 14:40 65980因为项目的需求,要在JAVA项目中调用Windows的Dll( ... -
关于读取配置文件Parsing failed.的问题
2007-09-07 17:12 13453今天将测试通过的应用,发给售前工程师在客户那进行安装,马上出现 ... -
Proxool连接池实现
2007-08-28 17:45 6845[code] 首先从 http://proxool.sour ... -
dbcp连接池实现
2007-08-27 17:22 13298DBCP是Apache的一个开源项目: commons.dbc ... -
log4j日志配置
2007-08-23 11:02 26024日志是应用软件中不可缺少的部分,Apache的开源项目Log4 ... -
Tomcat超过最大线程数出错,如何捕获异常
2007-08-22 12:56 5822Tomcat的server.xml中连接器设置如下 [code ... -
JDK5.0后的泛型程序设计
2007-08-17 11:36 6545之前了解学习了C#的语言特征,的确,C#是很好的面向对象的语言 ... -
Discuz! Passport 的AzDGCrypt算法
2007-08-14 15:06 4323前段时间客户(某电信公司)要求,我们公司的产品需要实现与他们的 ...
相关推荐
从键盘上输入一个身份证号码:回车之后,判断是否为正确号码(位数、有无字符);如果正确,则判断他是旧号码(15位)还是新号码(18位),如果是旧号码,把它转化为新号码;如果是新号码,打印出该人的生日、年龄和...
JAVA程序实验报告册.学期末老师留 的JAVA开发实践文档
java身份证系统,输入身份证号知道年龄性别省份等资料
为了克服传统身份证文字识别算法提取特征难的问题,提出一种基于深度学习的身份证号码识别方法。先通过OSTU实现文字区域的提取,再通过投影统计法切割单个文字的图片,分别从神经元数量、网络层深浅的变化分析网络...
用Matlab实现身份证号码快速识别.pdf
身份证号对应籍贯表大全(共6456条),身份证前6位,可定位到省份,行政市,行政县。可以很方便的根据身份证解析对应的籍贯,在数据分析领域中用途广泛,适用各种项目中的号码解析
1、可以通过语句对SQL server数据库中现有的身份证号进行验证,并把验证结果更新到某一列;...3、通过程序集和手动执行的sql,一般半小时内可以分析100万身份证号码的有效性,前提是服务器性能跟得上。
JavaScript正则表达式验证身份证号码是否合法(两种方法)分析.docx
深度学习在身份证号码识别中的应用.pdf
五年级数学上册《数字编码-身份证号码》案例分析及反思.doc
基于深度学习的身份证号码识别方法.pdf
开发过程中,常常需要对一些输入信息进行有效性验证,使用正则表达式进行校验是最简单、效率最高的方式了,下面就来看看15/18位身份证号码验证的正则表达式吧。 介绍 xxxxxx yyyy MM dd 375 0 十八位 xxxxxx yy MM...
VB编写的身份证校验程序,可以校验身份证号码的正确性
通过对身份证信息管理系统的分析与设计,基于二叉查找树这种数据结构,具体实现了身份证号码及相关信息的录入、快速进行身份证号码的查询并输出相关信息、修改身份证号码对应的相关信息、删除身份证信息等功能。
JS验证身份证及获取地区功能示例 主要介绍了JS实现的验证身份证及获取地区功能,结合实例形式分析了JS字符串、数组及正则操作相关技巧,需要的朋友可以参考下
核心基础-根据身份证号判断所属省份、生日及性别-Python源码示例.zip
记得应该是16年的时候,从一个公开课看到了关于OCR方面的内容,里面讲到了通过OpenCV对身份证号码区域的剪裁以及使用Tess-Two进行文字识别,实现了对身份证号码的识别功能。 断断续续看了点关于OpenCV的资料,感觉...
机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。它专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的...
软件开发设计:应用软件开发、系统...云计算与大数据:包括云计算平台、大数据分析、人工智能、机器学习等,云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备
本作品是一个通用的...通过数据结构算法对身份证号码进行分析和计算,最终输出由身份证号得到的身份信息,同时如果信息有误,系统会通过可视化界面进行提示。同时系统还具有程序简洁,灵活,执行效率高等众多优势。