家标准中规定：公民身份号码是特征组合码，由十七位数字本体码和一位校验码组成。18位数字组合的方式是：所以：
校验码计算方法.以下是用C++写的校验码检查程序：bool check(char id[]) {以及用R语言编写的小程序：check_CHN_ID <- function(id) {
重复号码.在实行18位编码及全国数据统一管理前，原有的公民身份号码为15位，15位编码相对于18位编码，出生日期码的年份只有两位，缺少校验码。