Class IdcardUtils

java.lang.Object
tech.riemann.nif.web.jsr380.validator.IdcardUtils

public class IdcardUtils extends Object
身份证工具类

用于身份证号码的验证、转换和处理

主要功能: 1. 验证15位和18位身份证号码的有效性 2. 将15位身份证号码转换为18位 3. 检查身份证号码格式是否正确 4. 验证身份证号码中的省份代码、出生日期等信息

支持的身份证类型: - 15位身份证号码 - 18位身份证号码(包含校验码)

Author:
Kerbores(kerbores@riemann.tech)
  • Field Details

    • codeAndCity

      protected static String[][] codeAndCity
      省份代码和名称的二维数组

      存储了中国各省份、自治区、直辖市、特别行政区的代码和名称

      格式:{代码, 名称}

  • Constructor Details

    • IdcardUtils

      public IdcardUtils()
  • Method Details

    • isValidatedAllIdcard

      public static boolean isValidatedAllIdcard(String idcard)
      验证所有类型的身份证号码

      支持15位和18位身份证号码的验证

      如果是15位身份证,会先转换为18位再验证

      Parameters:
      idcard - 身份证号码
      Returns:
      如果身份证号码有效返回true,否则返回false
    • isValidate18Idcard

      public static boolean isValidate18Idcard(String idcard)
      验证18位身份证号码

      验证规则: 1. 长度必须为18位 2. 前17位必须为数字 3. 第18位校验码必须正确 4. M41: 出生日期(6-13位)必须真实存在且不晚于今天(与 15 位验证对称)

      Parameters:
      idcard - 18位身份证号码
      Returns:
      如果身份证号码有效返回true,否则返回false
    • isValidate15Idcard

      public static boolean isValidate15Idcard(String idcard)
      验证15位身份证号码

      验证规则: 1. 长度必须为15位 2. 必须全部为数字 3. 省份代码必须有效 4. 出生日期必须有效 5. 出生日期不能在当前日期之后

      Parameters:
      idcard - 15位身份证号码
      Returns:
      如果身份证号码有效返回true,否则返回false
    • convertIdcarBy15bit

      public static String convertIdcarBy15bit(String idcard)
      将15位身份证号码转换为18位

      转换规则: 1. 验证输入是否为15位数字 2. 从15位身份证中提取出生日期 3. 将年份从2位扩展为4位 4. 计算校验码并添加到末尾

      Parameters:
      idcard - 15位身份证号码
      Returns:
      转换后的18位身份证号码,转换失败返回null
    • isIdcard

      public static boolean isIdcard(String idcard)
      检查是否为身份证号码格式

      支持15位和18位身份证号码

      正则表达式:(^\d{15}$)|(\d{17}(?:\d|x|X)$)

      Parameters:
      idcard - 身份证号码
      Returns:
      如果是身份证号码格式返回true,否则返回false
    • is15Idcard

      public static boolean is15Idcard(String idcard)
      检查是否为15位身份证号码格式

      正则表达式:^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$

      Parameters:
      idcard - 身份证号码
      Returns:
      如果是15位身份证号码格式返回true,否则返回false
    • is18Idcard

      public static boolean is18Idcard(String idcard)
      检查是否为18位身份证号码格式

      正则表达式:^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([\d|x|X]{1})$

      Parameters:
      idcard - 身份证号码
      Returns:
      如果是18位身份证号码格式返回true,否则返回false
    • isDigital

      public static boolean isDigital(String str)
      检查字符串是否为纯数字

      正则表达式:^[0-9]*$

      Parameters:
      str - 要检查的字符串
      Returns:
      如果是纯数字返回true,否则返回false
    • getPowerSum

      public static int getPowerSum(int[] bit)
      计算身份证校验码的权重和

      根据身份证前17位数字和对应的权重计算总和

      Parameters:
      bit - 身份证前17位数字的整数数组
      Returns:
      权重和
    • getCheckCodeBySum

      public static String getCheckCodeBySum(int sum17)
      根据权重和获取身份证校验码

      将权重和与11取模,根据余数获取对应的校验码

      余数与校验码的对应关系: 0 -> 1 1 -> 0 2 -> x 3 -> 9 4 -> 8 5 -> 7 6 -> 6 7 -> 5 8 -> 4 9 -> 3 10 -> 2

      Parameters:
      sum17 - 权重和
      Returns:
      校验码
    • converCharToInt

      public static int[] converCharToInt(char[] c)
      将字符数组转换为整数数组

      将身份证号码的字符数组转换为对应的整数数组,用于计算校验码

      Parameters:
      c - 字符数组
      Returns:
      整数数组