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; // 区域代码的个位数 * 9totalNumber += 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对台湾同胞身份证号码验证相关推荐

  1. 新旧身份证合法性验证及相互转换算法(三):Java身份证号码验证及将15位转换18位

    package test; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 身份证号码验证 * */ pub ...

  2. Android身份证号码验证

    最近用到身份证号码验证,在网上看了些资料,写了些方法记录下: 文章迁至:Java/Android通用身份证号验证 public class IDCardValidate {public static ...

  3. 正则实现二代身份证号码验证详解

    Start 开发过程中,常常需要对一些输入信息进行有效性验证,使用正则表达式进行校验是最简单.效率最高的方式了,下面就来看看15/18位身份证号码验证的正则表达式吧. 一: IdCodeValid:f ...

  4. 身份证号码验证(转)

    文章出处: http://dengo.org/archives/941 不少大的游戏注册时都要输入身份证号码,来限制未成年人,配合所谓的反沉迷系统,账号注册环节注重的是快捷,所以身份证验证都不是真实的 ...

  5. MySQL正则表达式判断身份证_15/18位身份证号码验证的正则表达式总结(详细版)...

    前言 开发过程中,常常需要对一些输入信息进行有效性验证,使用正则表达式进行校验是最简单.效率最高的方式了,下面就来看看15/18位身份证号码验证的正则表达式吧. 介绍 xxxxxx yyyy MM d ...

  6. 15/18位身份证号码验证

    15/18位身份证号码验证 在做身份证验证之前你得明确身份证号的组成. 首先我告诉你,18位身份证号码后面的字母只有"X"这一个.(X是罗马数字的10,用X来代替10,可以保证您的 ...

  7. 身份证号码验证验证 js_验证我的身份。 如果你可以的话…

    身份证号码验证验证 js I frequently hear questions like "How to implement authentication in an Android ap ...

  8. javascript身份证号码验证函数支持带x

    //--身份证号码验证-支持新的带x身份证 function isIdCardNo(num)  {     var factorArr = new Array(7,9,10,5,8,4,2,1,6,3 ...

  9. 身份证号码验证-支持新的带x身份证

    //--身份证号码验证-支持新的带x身份证 function isIdCardNo(num)  {     var factorArr = new Array(7,9,10,5,8,4,2,1,6,3 ...

最新文章

  1. Linux下getopt_long函数的使用
  2. vmrun 批量创建vmware虚拟机
  3. 面试题----寻找比一个N位数大的“下”一个数
  4. 8086 c语言,2016年上海大学机电工程与自动化学院微机硬件及软件(包含8086微机和C语言)之C程序设计考研复试题库...
  5. GAN模型-分析角度
  6. 用FFmpeg搭建基于CNN的视频分析方案
  7. Android多种样式的进度条
  8. cocos2d-x 3.0rc1 编译cpp-testsproject
  9. 功能测试常用6种方法_云端功能测试:更好的12种方法
  10. Linux下vsftpd的安装,Java上传文件实现。
  11. 从Hive导入数据到ES
  12. 如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
  13. OpenSSL密码库算法笔记——第6.1章 密钥
  14. dll中封装MFC(VC2012)资源--自定义一个复用的登录界面
  15. BAT等大厂年薪30W+面试清单:JVM\MySQL\设计模式\分布式\微服务
  16. Python自动化模拟键盘操作
  17. “the+形容词”的四种类型及语法特征
  18. 广域通信网知识点笔记
  19. 学习了C语言的第一个语言
  20. 建立完善的员工晋升机制_员工晋升机制

热门文章

  1. Apple ID 登录
  2. java计算机毕业设计基于安卓Android/微信小程序的游泳馆管理系统APP
  3. 重置计算机网络配置后上不了网,路由器重置后上不了网怎么办 怎么重新设置路由器...
  4. c++中字符数组与字符串的转换
  5. rtmp一些状态信息详解-as连接FMS服务器报错状态汇总~~
  6. MISAG与MIMAG:基因组质量评估标准
  7. 线性串联反馈式稳压电路原理分析
  8. 【DockerCE】Docker-CE 20.10.18正式版发布
  9. bps、Byte、MiB、bit、bits之间的关系
  10. 《幸福人生 从心开始》讲座参后感