身份证15位转18位(直接调用方法即可,简单方便!!!)

背景:

 

将15位身份证号码转换为18位身份证号码的方法是:
在15位身份证号码前加上6位数字,即出生年份的前两位,地区编码的后两位,以及补全的两位数字,例如:19或20(以出生年份为准)+地区编码+补全的两位数字。
将新的17位身份证号码的每一位分别乘以对应的权重,权重为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2。
将所得到的17个乘积相加,得到一个总和。
用总和除以11,得到一个余数。余数的取值范围为0到10。
根据余数的值,查找一个对应的校验码。校验码的取值范围为0到10,对应的值分别为:1 0 X 9 8 7 6 5 4 3 2。
将校验码加在新的17位身份证号码的最后一位,即得到18位身份证号码。
举个例子,如果原来的15位身份证号码是420106640901234,转换成18位身份证号码的过程是:
在前面加上6位数字:42(出生年份)+ 01(地区编码)+ 06(补全的两位数字)+ 640901234。
将新的17位身份证号码的每一位分别乘以对应的权重,并相加:4×7 + 2×9 + 0×10 + 1×5 + 0×8 + 6×4 + 6×2 + 4×1 + 0×6 + 1×3 + 2×7 + 3×9 + 4×10 + 0×5 + 1×8 + 2×4 + 3×2 = 182。
用182除以11,得到余数为4。
查找对应的校验码为3。
将校验码3加在新的17位身份证号码的最后一位,即得到18位身份证号码:420106199609012343。

代码如下:

public  String convertIdCard(String idCard) {
if (idCard == null) {
return null;
}
if (idCard.length() != 15) {
return idCard;
}
String idCard17 = idCard.substring(0, 6) + "19" + idCard.substring(6);
int sum = 0;
int[] coefficientArray = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
char[] idCard17Array = idCard17.toCharArray();
for (int i = 0; i < idCard17Array.length; i++) {
sum += (idCard17Array[i] - '0') * coefficientArray[i];
}
int remainder = sum % 11;
String[] checkCodeArray = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
return idCard17 + checkCodeArray[remainder];
}

-------------------------------------------------------------

附加:也可以自动写一个工具类


/**
* 将15位身份证号码转换为18位身份证号码 * * @param idCard 15位身份证号码 * @return 18位身份证号码
*/

 public class IdCardUtil {
        private static final int[] WEIGHT_FACTOR = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
        private static final char[] CHECK_CODE = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};

        /**
         * 将15位身份证号码转换为18位身份证号码     *     * @param idCard 15位身份证号码     * @return 18位身份证号码
         */
        public static String convert15To18(String idCard) {
            if (idCard == null || idCard.length() != 15) {
                return null;
            }
            String idCard17 = idCard.substring(0, 6) + "20" + idCard.substring(6);
            int sum = 0;
            for (int i = 0; i < idCard17.length(); i++) {
                char c = idCard17.charAt(i);
                int num = Character.getNumericValue(c);
                sum += num * WEIGHT_FACTOR[i];
            }
            int remainder = sum % 11;
            char checkCode = CHECK_CODE[remainder];
            return idCard17 + checkCode;
        }
    }

最方便的来了!!!

直接调用hutool工具类,里面有个IdcardUtil工具类,一行代码搞定

public static void main(String[] args) {
        String convert15To18 = IdcardUtil.convert15To18("420106640901234");
        System.out.println(convert15To18);
    }

依赖如下:

 <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.16</version>
        </dependency>

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: 我们可以使用以下函数来求n!:def factorial(n): if n == 0: return 1 else: return n * factorial(n-1)因此,要求用递归函数调用方法求n!,可以使用上述函数,即:factorial(n)。 ### 回答2: n!是指从1乘到n的积,可以通过递归调用函数来求解。以下是使用函数递归调用方法求n!的示例: ```python def factorial(n): if n == 0 or n == 1: return 1 else: return n * factorial(n - 1) n = int(input("请输入一个非负整数n: ")) result = factorial(n) print(f"{n}的阶乘是:{result}") ``` 在上述代码中,首先定义了一个名为factorial的函数,该函数接受一个非负整数n作为参数。如果n等于0或1,则直接返回1。否则,通过递归的方式调用函数自身,并将n减1作为参数传入函数。在递归调用中,将n与n的前一个数相乘,直到n等于0或1为止。 然后,通过输入函数获取用户输入的一个非负整数n,并调用factorial函数求解n的阶乘。最后,将结果打印输出。 使用递归调用函数求解n!的优点是代码简洁,易于理解。然而,如果n的值过大,递归调用可能会导致栈溢出的问题,因此在实际应用中需要注意控制递归的深度。 ### 回答3: 要求使用函数递归调用方法求n!(n的阶乘)。首先,需要明确如何定义阶乘。n的阶乘是指从1到n所有正整数的乘积,即n! = 1 * 2 * 3 * ... * n。 为了使用函数递归调用,我们可以使用一个递归函数来计算n的阶乘。递归函数的基本思想是将大问题化为规模较小的子问题,并通过不断地调用自身来解决子问题。 以下是一个用于计算n! 的递归函数的示例代码: ```python def factorial(n): # 递归结束的条件:当n = 0或n = 1时,直接返回1 if n == 0 or n == 1: return 1 # 递归调用自身,计算n的阶乘 else: return n * factorial(n-1) ``` 在以上代码中,递归函数factorial采用了以下逻辑: - 如果n等于0或1,就直接返回1,因为0!和1!都等于1。 - 如果n大于1,我们通过调用函数factorial(n-1)来计算(n-1)!,然后将结果乘以n,即n * factorial(n-1)。这样就得到了n!的值。 使用上述递归函数,可以方便地计算任意正整数n的阶乘。例如,对于n = 5,调用factorial(5),则会进行如下的计算过程: factorial(5) = 5 * factorial(4) = 5 * 4 * factorial(3) = 5 * 4 * 3 * factorial(2) = 5 * 4 * 3 * 2 * factorial(1) = 5 * 4 * 3 * 2 * 1 * factorial(0) = 5 * 4 * 3 * 2 * 1 * 1 = 120 因此,使用函数递归调用方法,可以求出n的阶乘。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值