| | |
| | | public static String restorePersonCode(Object number) { |
| | | // 1. 空值校验 |
| | | if (number == null) { |
| | | throw new IllegalArgumentException("传入数字不能为空"); |
| | | return ""; |
| | | } |
| | | |
| | | String original = number.toString(); |
| | | try { |
| | | // 2. 统一转换为字符串并去除首尾空格 |
| | | String numStr = number.toString().trim(); |
| | | String numStr = original.trim(); |
| | | |
| | | // 3. 校验是否为纯数字(排除负数、非数字字符) |
| | | if (!numStr.matches("\\d+")) { |
| | | throw new IllegalArgumentException("传入的不是有效正整数:" + numStr); |
| | | } |
| | | String digitStr; |
| | | if (numStr.matches("\\d+")) { |
| | | digitStr = numStr; |
| | | } else if (numStr.matches("(?i)^ZT\\d+$")) { |
| | | digitStr = numStr.substring(2); |
| | | } else if (numStr.matches("(?i)^ZT-\\d+$")) { |
| | | digitStr = numStr.substring(3); |
| | | } else { |
| | | return original; |
| | | } |
| | | |
| | | // 4. 补前置0到指定长度(6位),超出则保留原数字 |
| | | String paddedNum = String.format("%0" + DIGIT_LENGTH + "d", Long.parseLong(numStr)); |
| | | String paddedNum = StringUtils.leftPad(digitStr, DIGIT_LENGTH, '0'); |
| | | |
| | | // 5. 拼接前缀返回 |
| | | return PREFIX + paddedNum; |
| | | return PREFIX + paddedNum; |
| | | } catch (Exception e) { |
| | | return original; |
| | | } |
| | | } |
| | | |
| | | } |