测试类
IDCard idcard = new IDCard(); System.out.println(idcard.Verify(sfz));
经典验证类:
public class IdCardDemo {
public boolean isIdCard(String arrIdCard) {
int sigma = 0;
Integer[] a = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
String[] w = { "1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2" };
for (int i = 0; i < 17; i++) {
int ai = Integer.parseInt(arrIdCard.substring(i, i + 1));
int wi = a[i];
sigma += ai * wi;
}
int number = sigma % 11;
String check_number = w[number];
if (!arrIdCard.substring(17).equals(check_number)) {
return false;
} else {
return true;
}
}
}
相比第一个代码量更少!推荐呀
经过改写后的javascript版本:
function isIdCard(arrIdCard){
var tag = false;
var sigma = 0;
var a = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 );
var w = new Array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2");
for (var i = 0; i < 17; i++) {
var ai = parseInt(arrIdCard.substring(i, i + 1));
var wi = a[i];
sigma += ai * wi;
}
var number = sigma % 11;
var check_number = w[number];
if (arrIdCard.substring(17) != check_number) {
tag = false;
} else {
tag = true;
}
return tag;
}
经过测试OK
15位转换为18位,参考文章:15位号码转18位的JSP程序
?id=7
Java版
/**
* 15位转换18位
* */
public static String idCard15To18(String ID15) {
String ID18 = "";
if (ID15.length() == 18) {
ID18 = ID15.toUpperCase();
}
if (ID15.length() == 15) {
int[] w = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 };
char[] A = { '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' };
String ID17 = ID15.substring(0, 6) + "19" + ID15.substring(6, 15);
int[] ID17Array;
ID17Array = new int[17];
for (int i = 0; i < 17; i++) {
ID17Array[i] = Integer.parseInt(ID17.substring(i, i + 1));
}
int s = 0;
for (int i = 0; i < 17; i++) {
s = s + ID17Array[i] * w[i];
}
s = s % 11;
ID18 = ID17 + Character.toString(A[s]);
}
return ID18;
}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-35791-4.html
在中国同志有更传统的意思哦
农民才55元能做什么
我想这样就好了