最近做一个小项目,涉及到证件号码的校验,虽然目前基本没有15位证件号码,但是项目要求还是需要把15位转18位的问题校验。
原始代码中,有关于15位转18位和18转15位校验的。 本次只涉及15转18位校验。
public class ConvertCard {
final static int[] wi = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1};
static int[] vi = {1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2};
private static int[] ai = new int[18];
// 验证15位18位
public static boolean Verify(String idcard) {
if (idcard.length() == 15) {idcard = uptoeighteen(idcard);
}
if (idcard.length() != 18)
{ return false;
}
String verify = idcard.substring(17, 18);
if (verify.equals(getVerify(idcard)))
{
return true;
}
return false;
}// 得到最后地位校验码
public static String getVerify(String eightcardid) {
int remaining = 0;
if (eightcardid.length() == 18)
{ eightcardid = eightcardid.substring(0, 17);
} if (eightcardid.length() == 17) {
int sum = 0;
for (int i = 0; i < 17; i++) {
String k = eightcardid.substring(i, i + 1);
ai[i] = Integer.parseInt(k);
} for (int i = 0; i < 17; i++)
{ sum = sum + wi[i] * (ai[i]);
} remaining = sum % 11;
} return remaining == 2 ? "X" : String.valueOf(vi[remaining]);
}
// 15转18位
public static String uptoeighteen(String fifteencardid) {
String eightcardid = fifteencardid.substring(0, 6);
eightcardid = eightcardid + "19";
eightcardid = eightcardid + fifteencardid.substring(6, 15);
eightcardid = eightcardid + getVerify(eightcardid);
return eightcardid;
}
public static void main(String[] args){
System.out.println(Verify("360829860812171"));
}
}