c++实现18位身份证校验码的计算公式(转载)

本文介绍了如何使用C++编程计算18位身份证号码的校验码,详细阐述了计算公式和步骤,并提供了一个示例程序。
摘要由CSDN通过智能技术生成

c++实现18位身份证校验码的计算公式,居民身份证的号码是按照国家的标准编制的,由18位组成:前六位为行政区划代码,第七至第十四位为出生日期码,第15至17位为顺序码,第17位代表性别(奇数为男,偶数为女),第18位为校验码。

作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位,而19位的号码违反了国家标准,并且我国的计算机应用系统也不承认19位的身份证号码。Ⅹ是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准。

  (1)十七位数字本体码加权求和公式

       S = Ai * Wi, i = 2, ... , 18
       Y = mod(S, 11)
       i: 表示号码字符从右至左包括校验码字符在内的位置序号
       Ai:表示第i位置上的身份证号码字符值
       Wi:表示第i位置上的加权因子
       i:      18    17    16     15    14    13    12    11    10    9     8     7     6     5    4    3    2    1
       Wi:    7      9     10      5      8      4      2      1      6     3     7     9    10    5    8    4    2    1

(2

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
奇偶校验码是一种常用的错误检测方法,于检测数据传输过程中的错误。在C++编程中,可以通过以下方式实现奇偶校验码: 1. 首先,将要传输的数据转换为二进制形式。 2. 统计二进制数据中1的个数,如果个数为偶数,则在数据末尾添加一个0,如果个数为奇数,则在数据末尾添加一个1。 3. 将带有校验位的数据传输给接收端。 4. 接收端根据接收到的数据重新计算校验位,并与接收到的校验位进行比较。如果两者相同,则数据传输无误;如果不同,则说明数据传输过程中发生了错误。 下面是一个简单的C++代码示例,实现了奇偶校验码的生成和验证: ```cpp #include <iostream> #include <string> // 生成奇偶校验码 std::string generateParityCode(const std::string& data) { int count = 0; for (char c : data) { if (c == '1') { count++; } } std::string parityCode = data; if (count % 2 == 0) { parityCode += '0'; } else { parityCode += '1'; } return parityCode; } // 验证奇偶校验码 bool verifyParityCode(const std::string& data) { int count = 0; for (char c : data) { if (c == '1') { count++; } } return count % 2 == 0; } int main() { std::string data = "1100101"; std::string parityCode = generateParityCode(data); std::cout << "生成的奇偶校验码:" << parityCode << std::endl; bool isValid = verifyParityCode(parityCode); if (isValid) { std::cout << "奇偶校验码验证通过,数据传输无误。" << std::endl; } else { std::cout << "奇偶校验码验证失败,数据传输存在错误。" << std::endl; } return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值