原文地址:http://www.cnblogs.com/zhongshengzhen/

java对身份证验证及正则表达式解析

package service;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.regex.Pattern;
import org.junit.Test; public class TestRegex {
public static boolean isChineseName(String realname){
return Pattern.matches("[\u4e00-\u9fa5|·]{2,15}",realname);
}
public static boolean isCardId(String cardid){
return Pattern.matches("^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([\\d|x|X]{1})$", cardid);
}
public static String[] randomArray(int length){
int index = 0;
String temp = ",";
for(int ii=0;ii<1000;ii++){
for(int i=0;i<length;i++){
index = (int) (Math.random()*10);
temp += ( index + "");
}
temp +=",";
}
return temp.split(",");
}
//身份证前1位每位加权因子
private static int[] power = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
//身份证第18位校检码
private static String[] refNumber ={"1", "0", "X", "9", "8", "7", "6", "5", "4", "3"};
//省(直辖市)代码表
private String provinceCode[] = { "11", "12", "13", "14", "15", "21", "22",
"23", "31", "32", "33", "34", "35", "36", "37", "41", "42", "43",
"44", "45", "46", "50", "51", "52", "53", "54", "61", "62", "63",
"64", "65", "71", "81", "82", "91" };
/**
* 检查身份证的省份信息是否正确(使用与18/15位身份证)
* @param provinceid
* @return
*/
public boolean checkProvinceId(String provinceid){
for (String id : provinceCode) {
if (id.equals(provinceid)) {
return true;
}
}
return false;
}
/**
* 校验身份证第18位是否正确(只适合18位身份证)
* @param cardId
* @return
*/
public static boolean checkCardIdLastNum(String cardId){
if(cardId.length() != 18){
return false;
}
char[] tmp = cardId.toCharArray();
int[] cardidArray = new int[tmp.length-1];
int i=0;
for(i=0;i<tmp.length-1;i++){
cardidArray[i] = Integer.parseInt(tmp[i]+"");
}
String checkCode = sumPower(cardidArray);
String lastNum = tmp[tmp.length-1] + "";
if(lastNum.equals("x")){
lastNum = lastNum.toUpperCase();
}
if(!checkCode.equals(lastNum)){
return false;
}
return true;
}
/**
* 计算身份证的第十八位校验码
* @param cardidArray
* @return
*/
public static String sumPower(int[] cardidArray){
int result = 0;
for(int i=0;i<power.length;i++){
result += power[i] * cardidArray[i];
}
return refNumber[(result%11)];
}
/**
* 判断日期是否有效
* @param inDate
* @return
*/
public boolean isValidDate(String inDate) {
if (inDate == null){
return false;
}
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
if (inDate.trim().length() != dateFormat.toPattern().length()){
return false;
}
dateFormat.setLenient(false);//严格的日期匹配
try {
dateFormat.parse(inDate.trim());
} catch (ParseException e) {
return false;
}
return true;
}
//@Test
public void testName(){
String[] array = {"钟·","在哪"};
for(int i=0;i<array.length;i++){
System.out.println(array[i]+":"+isChineseName(array[i]));
}
}
//
//@Test
public void testCardId(){
String[] array = randomArray(18);
int index = 0,sum =0;
for(int i=0;i<array.length;i++){
sum += 1;
if(isCardId(array[i])){
index += 1;
}
System.out.println(array[i]+":"+isCardId(array[i]));
}
double ret = index/sum;
System.out.println(index+","+sum+","+ret);
}
//@Test
public void testArray(){
String[] array = randomArray(15);
for(int i=0;i<array.length;i++){
System.out.println(array[i]);
}
}
//@Test
public void testLastNum(){
String[] cardId = {"440982199563272359","43010219890414298x"};
for(int i=0;i<cardId.length;i++){
System.out.println(cardId[i]+":"+checkCardIdLastNum(cardId[i]));
}
}
//@Test
public void testProcince(){
String[] cardId = {"440982199563272359","43010219890414298x"};
for(int i=0;i<cardId.length;i++){
System.out.println(cardId[i].substring(0,2)+":"+checkProvinceId(cardId[i].substring(0,2)));
} }
@Test
public void testDate(){
//String[] cardId = {"440982199003272359","43010219890414298x"};
String cardId[] = {"445102198904312332",
"131100200102290696",
"51042119710630173X",
"340823196806263613",
"340703197410050615",
"440982195201230696",
"130203196110239132",
"321101197411218776",
"340501196812265178",
"330424197204277791",
"61040219710929439X",
"230826195610286476",
"350305196501252819",
"450881197212026374",
"220282197010121032",
"341723197209084377",
"451024197211265090",
"330727195609144416",
"411626197504219395",
"230605196203286219",
"21068119520426399X",
"511821195404264774",
"622923197107299798",
};
for(int i=0;i<cardId.length;i++){ System.out.println(cardId[i].substring(6,14)+":"+isValidDate(cardId[i].substring(6,14)));
}
}
}

java对身份证验证及正则表达式解析的更多相关文章

  1. js邮箱验证,身份证验证,正则表达式

    邮箱验证: html部分: 邮箱验证:<input type="text" id="mail" value="" / onkeyup= ...

  2. Java正则表达式实现港、澳、台身份证验证

    最近由于业务的要求,需要进行港.澳.台人员身份证验证,现在直接上代码,经供参考学习,也为自己积累一些工具类: package com.qiu.validate; public class regexV ...

  3. java身份证验证

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...

  4. 身份证号码的正则表达式及验证详解(JavaScript,Regex)

    简言 在做用户实名验证时,常会用到身份证号码的正则表达式及校验方案.本文列举了两种验证方案,大家可以根据自己的项目实际情况,选择适合的方案. 身份证号码说明 居民身份证号码,正确.正式的称谓应该是&q ...

  5. Java国际化号码验证方法,国内手机号正则表达式

    Java国际化号码验证方法,国内手机号正则表达式 中国电信号段 133.149.153.173.177.180.181.189.199 中国联通号段 130.131.132.145.155.156.1 ...

  6. 【Java】身份证号码验证

    代码引用自:https://gitee.com/appleat/codes/ynrtqujv0wfgesm8ia9b547 package xxx; /** * Created by wdj on 2 ...

  7. Java实现身份证号码验证源码分享

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...

  8. Java基础之身份证验证

    //简约版package test; import java.util.Scanner; public class ID { /** * 匹配算法 : 1) 得到17位身份证号码与下面给出的17位 2 ...

  9. inform表单验证,正则表达式,用户名,身份证,密码,验证码

    最近利用空闲时间写了部分表单验证,包括用户名,身份证,密码,验证码,仅为自己巩固最近所学的知识 表单的样式使用的是table布局,因为觉得DIV布局定位比较麻烦,table有三列,分别为基本信息,输入 ...

随机推荐

  1. 安装Hadoop系列 — 安装JDK-8u5

    安装步骤如下: 1)下载 JDK 8 从http://www.oracle.com/technetwork/java/javasebusiness/downloads/ 选择下载JDK的最新版本 JD ...

  2. CodeWars题目筛选

    http://www.codewars.com/kata/search/csharp?q=&r%5B%5D=-8&xids=completed&beta=false 语言选择C ...

  3. poj1180

    斜率优化dp 据说这题朴素的O(n2)dp也可以A 没试过 朴素的dp不难想:f[i]=min(f[j]+sumtime[i]*sumcost[j+1,i]+c*sumcost[j+1,n]) 稍微解 ...

  4. js如何判断是手机端还是PC端访问

    function isMobile(){ var sUserAgent= navigator.userAgent.toLowerCase(), bIsIpad= sUserAgent.match(/i ...

  5. HTTP编程(六)

    此为网络编程的一个系列,后续会把内容补上.....

  6. 如何在一个frame中调用另一个frame中的javascript函数

    1.htm <script language="javascript">function test(){alert("测试")}</scrip ...

  7. Mac: the original hosts

    ## # Host Database # # localhost is used to configure the loopback interface # when the system is bo ...

  8. 【转】android的消息处理机制(图+源码分析)——Looper,Handler,Message

    原文地址:http://www.cnblogs.com/codingmyworld/archive/2011/09/12/2174255.html#!comments 作为一个大三的预备程序员,我学习 ...

  9. SharePoint 2010 获取当前用户的权限

    转:http://blog.csdn.net/sygwin_net/article/details/6790500 操作环境:SharePoint 2010 关于SharePoint 的权限架构,具体 ...

  10. jsp、js、html等

    1.一个button标签怎么触发事件: 一般触发事件有两种方式,要么是在html直接绑定,即button标签中不只有class.type和id,还要写onclick=... 还有一种,就是在js代码部 ...