身份证15位升18位++身份证验证
def test1(){
//身份证件号验证++身份证号升位
def sql = new Sql(dataSource)
String sfz = "SELECT id,sfzjh FROM jzgjbsj"
def sfzh = sql.rows(sfz)
def i = 0
while (i<sfzh.size()){
def tests = sfzh[i].sfzjh
def tesa = tests.toString()
if (tesa.size()==15){
StringBuffer sb = new StringBuffer()
sb.append(tesa.substring(0,6))
.append("19")
.append(tesa.substring(6))
String csb = sb.toString()
def zzz = getVerifyCode(csb)
sb.append(zzz)
println "升为后的身份证号:"+sb
}
if (tesa.size()==18) {
def ereg
//平润 判断
if (Integer.parseInt(tesa.substring(6, 10)) % 4 == 0 || (Integer.parseInt(tesa.substring(6, 10)) % 100 == 0 && Integer.parseInt(tesa.substring(6, 10)) % 4 == 0)) {
ereg = /[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]/
//闰年出生日期的合法性正则表达式 适用19XX
} else {
ereg = /[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]/
//平年出生日期的合法性正则表达式 适用19XX
}
//正则表达式的一种比较方式 ==~ 匹配操作符 (==~) 查找操作符 (=~) 模式操作符 (~string)
def math = tesa ==~ ereg
if (math) {
// 1.将身份证号码前面的17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
int[] intArr = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
def sum = 0;
def z
for (z = 0; z < intArr.size(); z++) {
// 2.将这17位数字和系数相乘的结果相加。
sum += Character.digit(tesa.charAt(z), 10) * intArr[z];
}
// 3.用加出来和除以11,看余数是多少?
int mod = sum % 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。
int[] intArr3 = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]
String matchDigit = "";
for (z = 0; z < 11; z++) {
int j = z;
if (j == mod) {
matchDigit = String.valueOf(intArr3[z]);
if (intArr3[z] > 57) {
matchDigit = String.valueOf((char) intArr3[z]);
}
}
}
//与18位身份证 的验证码比较
if (matchDigit.equals(tesa.substring(tesa.length() - 1))) {
} else {
StringBuilder stringBuilder = new StringBuilder(tesa)
//有新的验证码替换原来的验证码
stringBuilder.replace(tesa.length() - 1, tesa.length(), matchDigit)
def upda = stringBuilder.toString()
println("ID Card Verify Faild!" + tesa + "=======" + matchDigit + "-----更改后的:" + upda)
}
} else {
println math.toString() + "====" + tesa
}
}
i++
}
}
def getVerifyCode(String sb){
char[] code = ['1','0','X','9','8','7','6','5','4','3','2']; //11个
int[] intArr2 = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ]//17个
int z;
int sum;
int remainder;
sum = 0;
for (z=0; z<intArr2.size(); z++)
{
sum += Character.digit(sb.charAt(z), 10) * intArr2[z];
}
remainder = sum%11;
String lastCheckBit = String.valueOf(code[ remainder ]);
return sb + lastCheckBit;
}
猜你喜欢
转载自zjyads.iteye.com/blog/2331551
今日推荐
周排行