C语言05-05-15 身份证的秘密(身分证的判断)

img

img

img

img


现在,于龙给你一个身份证号,你能知道它是不是一个合法的号码?如果是合法的你知道这个号码是男是女吗?
思路是什么。

【以下回答由 GPT 生成】

解决方案

问题1: 如何判断一个身份证号码的合法性?

身份证号码的合法性判断可以通过以下几个步骤完成:

  1. 判断身份证号码的长度是否是18位。
  2. 判断身份证号码的前17位是否都是数字。
  3. 计算身份证号码的最后一位校验码,与身份证号码的最后一位进行比较。

校验码的计算算法如下: 1. 将身份证号码的前17位分别乘以对应的权重:第一位乘以7,第二位乘以9,第三位乘以10,以此类推,最后一位乘以3。 2. 将所有乘积相加得到一个总和。 3. 将总和除以11,取余得到一个值。 4. 根据余数的值,查找对应的校验码表,得到校验码。 5. 判断身份证号码的最后一位与计算得到的校验码是否一致。

以下是一个示例的代码实现:

#include <stdio.h>
#include <stdbool.h>

bool checkIDCardValidity(char* idCardNumber) {
    int weight[] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
    char checkCode[] = "10X98765432";
    int sum = 0;

    // 检查身份证号码长度是否为18位
    if(strlen(idCardNumber) != 18) {
        return false;
    }

    // 检查前17位是否都是数字
    for(int i = 0; i < 17; i++) {
        if(idCardNumber[i] < '0' || idCardNumber[i] > '9') {
            return false;
        }
    }

    // 计算校验码
    for(int i = 0; i < 17; i++) {
        sum += (idCardNumber[i] - '0') * weight[i];
    }

    int remainder = sum % 11;
    char expectedCode = checkCode[remainder];

    // 判断身份证号码的最后一位与计算得到的校验码是否一致
    if(idCardNumber[17] != expectedCode) {
        return false;
    }

    return true;
}

问题2: 如何从一个合法的身份证号码中判断该身份证所代表的性别是男性还是女性?

根据国家标准,性别信息被编码在身份证号码的倒数第二位上,奇数代表男性,偶数代表女性。

以下是一个示例的代码实现:

#include <stdio.h>
#include <stdbool.h>

bool checkIDCardValidity(char* idCardNumber) {
    // ... 身份证合法性检查的代码

    // 获取身份证号码的倒数第二位
    char genderBit = idCardNumber[16];

    // 判断性别
    if((genderBit - '0') % 2 == 0) {
        printf("性别:女性\n");
    } else {
        printf("性别:男性\n");
    }

    return true;
}

注意:以上代码仅提供了基本的身份证号码合法性检查和性别判断逻辑,实际应用中可能需要更复杂的逻辑来处理不同的情况,比如特殊身份证号码、非大陆地区身份证号码等。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^