概述
package com.yt.eos.common.enumclass;
import org.apache.commons.lang3.StringUtils;
/**
* 台湾同胞身份证号码验证
* @author tyg
* @date
2019年5月8日下午3:51:11
*/
public enum TaiWanIdCardEnum {
台北市("A", 10), 台中市("B", 11), 基隆市("C", 12), 台南市("D", 13), 高雄市("E", 14), 新北市("F", 15), 宜兰县("G", 16), 桃园市("H", 17),
嘉义市("I", 34), 新竹县("J", 18), 苗栗县("K", 19), 台中县("L", 20), 南投县("M", 21), 彰化县("N", 22), 新竹市("O", 35), 云林县("P", 23),
嘉义县("Q", 24), 台南县("R", 25), 高雄县("S", 26), 屏东县("T", 27), 花莲县("U", 28), 台东县("V", 29), 金门县("W", 32), 澎湖县("X", 30),
阳明山("Y", 31), 连江县("Z", 33),;
private String code;
private int number;
private TaiWanIdCardEnum(String code, int number) {
this.code = code;
this.number = number;
}
public String getCode() {
return code;
}
public int getNumber() {
return number;
}
/**
* 根据code获取对应的区域枚举
* @param code
* @return
* @return TaiWanCodeEnum
* @author tyg
* @date
2019年5月8日下午3:53:05
*/
public static TaiWanIdCardEnum getEnumByCode(String code) {
if (StringUtils.isNotBlank(code)) {
for (TaiWanIdCardEnum e : TaiWanIdCardEnum.values()) {
if(e.getCode().equals(code)) {
return e;
}
}
}
return null;
}
/**
* 验证是否台湾同胞身份证
* @param idCard
* @return
* @return boolean
*
false:表示身份证号码不合法
*
true :表示身份证号码合法
* @author tyg
* @date
2019年5月8日下午3:48:33
*/
public static boolean isTaiWanIdCard(String idCard) {
if (StringUtils.isNotBlank(idCard) && idCard.length() == 10) {
idCard = idCard.toUpperCase();
// 第一位验证:第一位是用户所在的地区
TaiWanIdCardEnum tw = getEnumByCode(idCard.substring(0, 1));
if (tw == null) {
return false;
}
try {
// 第二位验证:第二位是性别《1:男,2:女》
int sex = Integer.parseInt(idCard.substring(1, 2));
if (sex != 1 && sex != 2) {
return false;
}
// 第三位~第九位:顺序码
// 十位数
int ten = tw.getNumber() / 10 % 10;
// 个位数
int one = tw.getNumber() % 10;
int totalNumber = ten; // 区域代码的十位数
totalNumber += one * 9; // 区域代码的个位数 * 9
totalNumber += sex * 8; // 性别 * 8
// 以下都是身份证的第3位 ~ 第9位
int number = 7;
for (int i = 2; i < 9; i++) {
if (number < 1) {
break;
}
totalNumber += Integer.parseInt(idCard.substring(i, i + 1)) * number;
number --;
}
System.out.println("第三位~第九位计算和为:" + totalNumber);
String totalNumberStr = totalNumber+"";
// 第十位:用 10 减去计算和的各位数
int lastNumber = 10 - Integer.parseInt((totalNumberStr).substring(totalNumberStr.length() - 1));
lastNumber = lastNumber == 10 ? 0 : lastNumber;
if (lastNumber == Integer.parseInt(idCard.substring(9))) {
return true;
}
} catch (NumberFormatException e) {
e.printStackTrace();
}
}
return false;
}
public static void main(String[] args) {
boolean vali = TaiWanIdCardEnum.isTaiWanIdCard("T123456785");
System.out.println(vali ? "身份证号码合法" : "身份证号码不合法!");
}
}
注:第三位~第九位不要截取出来后转为数字,因为前面可能是0!
最后
以上就是玩命海燕为你收集整理的java对台湾同胞身份证号码验证的全部内容,希望文章能够帮你解决java对台湾同胞身份证号码验证所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复