新起点
中华人民共和国公民身份号码
2020-12-04 06:08:47

中华人民共和国公民身份号码是中华人民共和国为中国大陆每个公民从出生之日起,及港澳台居民从申请居住证之日起,编定的唯一的、终身不变的身份代码,在中华人民共和国公民办理涉及政治、经济、社会生活等权益事务方面广泛使用。中华人民共和国公安部负责公民身份号码的编制和组织实施工作。

1999年8月26日中华人民共和国国务院发布《国务院关于实行公民身份号码制度的决定》(国发15号),这个文件规定自1999年10月1日起在全国建立和实行公民身份号码制度。

中华人民共和国国家标准GB 11643-1999《公民身份号码》中规定:公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。

18位数字组合的方式是:

所以:

以下是用C++写的校验码检查程序:

bool check(char id) {	int index, sum, num;	for (sum = index = 0; index < 17; index++)		sum += (pow(2, 17 - index) % 11) * (id - '0');	num = (12 - (sum % 11)) % 11;	if (num < 10)		return (num == id - '0');	else		return (id == 'X');}

以及用R语言编写的小程序:

check_CHN_ID <- function(id) {  ids <- strsplit(as.character(id),'')]  if(length(ids) != 18) return(FALSE)  s <- sum(2^(17:1) %% 11 * as.numeric(ids))  n <- (12 - s%%11) %% 11  ifelse(n<10, n == as.numeric(ids), toupper(ids) == 'X')}

应用

重复号码

在实行18位编码及全国数据统一管理前,原有的公民身份号码为15位,15位编码相对于18位编码,出生日期码的年份只有两位,缺少校验码。

因为手工升号的原因,第二代身份证曾存在171万例重复的号码,公安部开展户口清理整顿工作后,公民身份号码重号人数已减至8人。

相关:

  • 中华人民共和国国家标准
  • 网站公告: