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