18位身份证号编码规则&最后一位

例如某18位身份证号为:ABCDEF YYYY MMDD SSSV

第1位——第6位代表(ABCDEF):表示区域。

第7位——第14位(YYYYMMDD):表示出身日期,例如20140809。

第15位——第17位(SSS):表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。

第18位(V):校验码,根据前17位数字和计算公式得出,计算公式是:x=Sum(Ai*217-i+1mod 11 ,其中i=1,2,3,...,17,Ai是第i位身份证号码(从左往右数),x结果是从0到10,分别对应的V是1 0 X 9 8 7 6 5 4 3 2。

之所以mod11,而不是10是因为取模通常取素数。


自己写了个小程序用于计算最后一位校验码

Input:前17位身份证号

Output:最后一位是:X

demo:

#include<iostream>

using namespace std;

int main()
{
	char card_number_17[17];
	while (cin >> card_number_17 && card_number_17[17]!=EOF)
	{
		int sum = 0;
		char last='\0';
		for (int i = 17; i >= 1; i--)
		{
			sum += (card_number_17[17 - i] - '0')*pow(2,i);
		}
		switch (sum%11)
		{
			case 0:
				last = '1';
				break;
			case 1:
				last = '0';
				break;
			case 2:
				last = 'X';
				break;
			case 3:
				last = '9';
				break;
			case 4:
				last = '8';
				break;
			case 5:
				last = '7';
				break;
			case 6:
				last = '6';
				break;
			case 7:
				last = '5';
				break;
			case 8:
				last = '4';
				break;
			case 9:
				last = '3';
				break;
			case 10:
				last = '2';
				break;
			default:
				break;
		}
		cout <<"最后一位是:"<< last << endl;
		last = '\0';
	}
	return 0;
}


ps:因为第15至第17位是表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。所以还要隐形的满足的条件是:同一地区同年同月同日不出生多于500个同性人(10*10*5=500)。


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是一个 Python 中定义身份证号类的示例代码: ```python class IDCard: def __init__(self, id_number): self.id_number = id_number def validate(self): # TODO: 实现身份证号合法性验证逻辑 pass def get_province(self): # TODO: 实现获取身份证号所属省份逻辑 pass def get_city(self): # TODO: 实现获取身份证号所属城市逻辑 pass def get_birthday(self): # TODO: 实现获取身份证号对应的出生日期逻辑 pass def get_gender(self): # TODO: 实现获取身份证号对应的性别逻辑 pass ``` 在这个类中,我们定义了一个初始化方法 `__init__`,它接收身份证号 `id_number` 作为参数,并将其存储在 `self.id_number` 属性中。此外,我们还定义了一些方法,如 `validate` 方法用于验证身份证号的合法性,`get_province` 和 `get_city` 方法用于获取身份证号所属的省份和城市,`get_birthday` 方法用于获取身份证号对应的出生日期,`get_gender` 方法用于获取身份证号对应的性别。这些方法的具体实现代码需要根据身份证号编码规则来实现。 ### 回答2: 身份证号是一个重要的个人识别标识,可以用一个类来存放和管理身份证号。一个合适的类定义可以包含以下几个方面的属性和方法: 1. 属性: - id_number: 身份证号,可以定义为字符串类型。 2. 方法: - get_id_number(): 获取当前实例的身份证号。 - set_id_number(new_id_number): 设置当前实例的身份证号为new_id_number。 - is_valid_id_number(): 判断当前实例的身份证号是否合法。 - get_birth_date(): 获取当前实例的出生日期,根据身份证号规则进行提取。 - get_gender(): 获取当前实例的性别,根据身份证号规则进行判断。 - get_location(): 获取当前实例的户籍所在地,根据身份证号前几位编码进行查询。 通过以上的类定义,我们可以将不同的身份证号实例化为类的对象,并使用类的方法来获取身份证号的相关信息。同时,我们也可以利用类的属性和方法进行身份证号的校验和处理,确保数据的有效性和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值