转载地址:http://www.w3china.org/blog/more.asp?name=lhwork&id=19148
import java.util.regex.*;
/**
*<p>Title:验证18/15位中国公民身份证号码,并分析有效的数据</p>
*<p>Description:</p>
</p>
*<p>Company:Labile</p>
*@authornotattributable
*@version1.0
*/
publicclass Verifier {
privatestaticfinal String verify18PatternStr = "(\\d{6})" + "(\\d{8})" + "(\\d{3})" + "([\\d[xX]]{1})";
privatestaticfinal Pattern verify18Pattern = Pattern.compile(verify18PatternStr);
privatestaticfinal String verify15PatternStr = "(\\d{6})" + "(\\d{6})" + "(\\d{3})";
privatestaticfinal Pattern verify15Pattern = Pattern.compile(verify15PatternStr);
/**
位的权
*/
privatestaticfinalintverify18Rights[] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1};
/**
*检验码校对表
*/
privatestaticfinal String verify18CheckDigit[] = {"1","0","X","9","8","7","6","5","4","3","2"};
/**
*地区码
*/
private String areaNum;
/**
*出生时间
*/
private String birthdayNum;
/**
*顺序号
*/
private String seqNum;
/**
*校验码
*/
private String check_digit;
privateintlength;
publicboolean isMan() {
int num = Integer.parseInt(seqNum);
if(num%2==1) {
returntrue;
}
else
returnfalse;
}
/**
*得到生日的日期,格式:yyyy-mm-dd
*@returnString
*/
public String getBirthday() {
String FullBirthdayNum = null;
if(length==15)//在生日号码前加“19”
FullBirthdayNum = "19" + birthdayNum;
else
FullBirthdayNum = birthdayNum;
String year = FullBirthdayNum.substring(0, 4);
String month = FullBirthdayNum.substring(4, 6);
String date = FullBirthdayNum.substring(6, 8);
return year + "-" + month + "-" + date;
}
public Verifier(String IDCardNO) throws LengthIllegalException, CheckDigitInvalidException, NumberInvalidException {
if(IDCardNO == null)
thrownew NumberInvalidException();
length = IDCardNO.length();
switch(length) {
case 15:
Verifier15(IDCardNO);
break;
case 18:
Verifier18(IDCardNO);
break;
default:
thrownew LengthIllegalException();
}
}
privatevoid Verifier15(String IDCardNO) throws NumberInvalidException {
Matcher m = verify15Pattern.matcher(IDCardNO);
if(m.matches()==false) {
thrownew NumberInvalidException();
}
areaNum = m.group(1);
birthdayNum = m.group(2);
seqNum = m.group(3);
}
privatevoid Verifier18(String IDCardNO) throws CheckDigitInvalidException, NumberInvalidException {
Matcher m = verify18Pattern.matcher(IDCardNO);
if(m.matches()==false) {
thrownew NumberInvalidException();
}
areaNum = m.group(1);
birthdayNum = m.group(2);
seqNum = m.group(3);
check_digit = m.group(4);
//预期的校验位:
String expect_check_digit = getCheck_digit18(IDCardNO);
//如果校验位无效
if(expect_check_digit.equalsIgnoreCase(check_digit)==false)
thrownew CheckDigitInvalidException();
}
/**
位/17位身份证号算出校验位
*@paramIDCardNOString
*@returnString
*/
publicstatic String getCheck_digit18(String IDCardNO) {
//权总值
int sum = 0;
for(int i=0; i<=16; i++) {
int num = Integer.parseInt( IDCardNO.substring(i,i + 1) );
int right = verify18Rights[i];
sum = sum + num*right;
}
//对权总值取模
int y = sum % 11;
returnverify18CheckDigit[y];
}
publicstatic String IDCardNO15To18(String IDCardNO15) throws
NumberInvalidException {
Matcher m = verify15Pattern.matcher(IDCardNO15);
if(m.matches()==false) {
thrownew NumberInvalidException();
}
String NO17 = IDCardNO15.substring(0,6) + "19" + IDCardNO15.substring(6,15);
return NO17 + getCheck_digit18(NO17);
}
public String getAreaNum() {
returnareaNum;
}
public String getBirthdayNum() {
returnbirthdayNum;
}
/**
位时返回null
*@returnString
*/
public String getCheck_digitNum18() {
returncheck_digit;
}
publicint getLength() {
returnlength;
}
public String getSeqNum() {
returnseqNum;
}
}
import java.util.regex.*;
/**
*<p>Title:验证18/15位中国公民身份证号码,并分析有效的数据</p>
*<p>Description:</p>
</p>
*<p>Company:Labile</p>
*@authornotattributable
*@version1.0
*/
publicclass Verifier {
privatestaticfinal String verify18PatternStr = "(\\d{6})" + "(\\d{8})" + "(\\d{3})" + "([\\d[xX]]{1})";
privatestaticfinal Pattern verify18Pattern = Pattern.compile(verify18PatternStr);
privatestaticfinal String verify15PatternStr = "(\\d{6})" + "(\\d{6})" + "(\\d{3})";
privatestaticfinal Pattern verify15Pattern = Pattern.compile(verify15PatternStr);
/**
位的权
*/
privatestaticfinalintverify18Rights[] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1};
/**
*检验码校对表
*/
privatestaticfinal String verify18CheckDigit[] = {"1","0","X","9","8","7","6","5","4","3","2"};
/**
*地区码
*/
private String areaNum;
/**
*出生时间
*/
private String birthdayNum;
/**
*顺序号
*/
private String seqNum;
/**
*校验码
*/
private String check_digit;
privateintlength;
publicboolean isMan() {
int num = Integer.parseInt(seqNum);
if(num%2==1) {
returntrue;
}
else
returnfalse;
}
/**
*得到生日的日期,格式:yyyy-mm-dd
*@returnString
*/
public String getBirthday() {
String FullBirthdayNum = null;
if(length==15)//在生日号码前加“19”
FullBirthdayNum = "19" + birthdayNum;
else
FullBirthdayNum = birthdayNum;
String year = FullBirthdayNum.substring(0, 4);
String month = FullBirthdayNum.substring(4, 6);
String date = FullBirthdayNum.substring(6, 8);
return year + "-" + month + "-" + date;
}
public Verifier(String IDCardNO) throws LengthIllegalException, CheckDigitInvalidException, NumberInvalidException {
if(IDCardNO == null)
thrownew NumberInvalidException();
length = IDCardNO.length();
switch(length) {
case 15:
Verifier15(IDCardNO);
break;
case 18:
Verifier18(IDCardNO);
break;
default:
thrownew LengthIllegalException();
}
}
privatevoid Verifier15(String IDCardNO) throws NumberInvalidException {
Matcher m = verify15Pattern.matcher(IDCardNO);
if(m.matches()==false) {
thrownew NumberInvalidException();
}
areaNum = m.group(1);
birthdayNum = m.group(2);
seqNum = m.group(3);
}
privatevoid Verifier18(String IDCardNO) throws CheckDigitInvalidException, NumberInvalidException {
Matcher m = verify18Pattern.matcher(IDCardNO);
if(m.matches()==false) {
thrownew NumberInvalidException();
}
areaNum = m.group(1);
birthdayNum = m.group(2);
seqNum = m.group(3);
check_digit = m.group(4);
//预期的校验位:
String expect_check_digit = getCheck_digit18(IDCardNO);
//如果校验位无效
if(expect_check_digit.equalsIgnoreCase(check_digit)==false)
thrownew CheckDigitInvalidException();
}
/**
位/17位身份证号算出校验位
*@paramIDCardNOString
*@returnString
*/
publicstatic String getCheck_digit18(String IDCardNO) {
//权总值
int sum = 0;
for(int i=0; i<=16; i++) {
int num = Integer.parseInt( IDCardNO.substring(i,i + 1) );
int right = verify18Rights[i];
sum = sum + num*right;
}
//对权总值取模
int y = sum % 11;
returnverify18CheckDigit[y];
}
publicstatic String IDCardNO15To18(String IDCardNO15) throws
NumberInvalidException {
Matcher m = verify15Pattern.matcher(IDCardNO15);
if(m.matches()==false) {
thrownew NumberInvalidException();
}
String NO17 = IDCardNO15.substring(0,6) + "19" + IDCardNO15.substring(6,15);
return NO17 + getCheck_digit18(NO17);
}
public String getAreaNum() {
returnareaNum;
}
public String getBirthdayNum() {
returnbirthdayNum;
}
/**
位时返回null
*@returnString
*/
public String getCheck_digitNum18() {
returncheck_digit;
}
publicint getLength() {
returnlength;
}
public String getSeqNum() {
returnseqNum;
}
}
- Java实现身份证号码校验
二话不说,直接上代码. package hope.identitycodecheck.demo; import java.text.DateFormat; import java.text.Simpl ...
- 国民身份证号码校验之“C#/Winform方法实现+案例分析”
根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出 ...
- JS011. 身份证号码校验(仅34行)
身份证格式 六位数字地址码 + 八位数字出生日期码 + 三位数字顺序码 + 一位数字校验码 checkIdCard.js checkIdCard: function (idCard){ //15位和1 ...
- JS身份证号码校验
var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ]; // 加权因子 var ValideCode = [ 1, 0 ...
- js实现手机号码和身份证号码校验
<script type="text/javascript"> function checkform() { var re; var ss = document.get ...
- iOS开发之身份证号码校验
// // Card.h // THCStore // // Created by Mac on 15/7/15. // Copyright (c) 2015年 Mac. All rights ...
- 身份证号码的正则表达式及验证详解(JavaScript,Regex)
简言 在做用户实名验证时,常会用到身份证号码的正则表达式及校验方案.本文列举了两种验证方案,大家可以根据自己的项目实际情况,选择适合的方案. 身份证号码说明 居民身份证号码,正确.正式的称谓应该是&q ...
- 从身份证号码中获取性别、出生日期、籍贯,并更新mongodb
有这样的需求,人员信息是存在mongodb中,需要存放人员的身份证.性别.出生日期.籍贯等信息.通过脚本导入这些信息,但是只导入了身份证号码,其他信息空缺.现在需要补全其他信息. 其实身份证信息就包含 ...
- Python实现身份证号码有效性验证
# -*- coding: utf-8 -*- import re #Errors=['验证通过!','身份证号码位数不对!','身份证号码出生日期超出范围或含有非法字符!','身份证号码校验错误!' ...
随机推荐
- Android 开发环境搭建以及编译
两种搭建编译环境的方式,一种方法是用户安装虚拟机,然后安装基础的Ubuntu12.04.2 系统,利用提供的工具和详细的使用步骤,搭建编译环境:另外一种方法是用户安装虚拟机,然后直接加载 “搭建好的U ...
- Vagrant配置与使用
Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境.它 使用Oracle的开源VirtualBox虚拟化系统,使用 Chef创建自动化虚拟环境. Vagrant is an amaz ...
- 当As3遇见Swift(三)
类 As3 Swift中似乎没有包,包路径的概念.因而显得简洁的多. package { public class ShuaiGe { } } Swift类 class ShuaiGe{ } 类的构造 ...
- 监控linux服务器网卡流量
监控linux服务器网卡流量 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 欢迎加入:高级运维工程师之路 598432640 前言:众所周知,我们安装zabbix服务器 ...
- Java基础(44):ArrayList使用详解
1.什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处: a.动态的增加和减少元素 b.实现了IColle ...
- linux代码段,数据段,BSS段, 堆,栈(二)
//main.cpp int a = 0; 全局初始化区 char *p1; 全局未初始化区 main() { int b; 栈 char s[] = "abc"; 栈 char ...
- ios json parse
参考:http://wenxin2009.iteye.com/blog/1671691
- ppaer 67 : matlab 函数errorbar
MATLAB ERRORBAR 这个函数的意思是:ERRORBAR(X,Y,L,U),X是自变量,Y是因变量,L是Y的变动下限,U是Y的变动上限 errorbar(X,Y,E) X是自变量,Y是因变 ...
- mongo自带测试
benchrun > res = benchRun({ ops:[{ ns:"test.foo", op:"insert", doc:{y:{,]}} } ...
- oracle ebs 采购订单关闭之PL/SQL实现方法
应客户需求,需要写个脚本,批量关闭Bonus Item类型的采购订单,在metalink上搜索到一些方法,但是都测试不通.原来需要将代码生成一个并发程序.下面是测试成功的代码. 1.首先创建一个存储过 ...