慢慢来,别急 2023-09-11 18:06 采纳率: 66.7%
浏览 41

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

img

img

img

img


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

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-11 20:17
    关注

    【以下回答由 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;
    }
    

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



    【相关推荐】



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

报告相同问题?

问题事件

  • 创建了问题 9月11日

悬赏问题

  • ¥15 51寻迹小车定点寻迹
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题
  • ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含
  • ¥15 麒麟V10桌面版SP1如何配置bonding
  • ¥15 Marscode IDE 如何预览新建的 HTML 文件