居民身份证最后一位数字验证

中华人民共和国居民身份证共有18为数字或字母组成,固然这些数字各自有各自所表明的意义。
居民身份证最后一位数字验证
前6为表明省市县(区)的行政代码,中间8为表明着出生年月日,再后两位表明所在派出所代码,倒数第二位表明性别,奇数为男,偶数为女,惟独最后一位没有实际意义,仅仅是用来校验用的,这也就出现了有些人最后一位是X,其实X是校验算法算出来的数字除以11求余获得的,一共有0到10的11中可能,因此为了保证不会多出一位数字(变成19位),就加入了X。
验证算法是将身份证前17为数字分别依次乘以:7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2
而后求和,除11求余数。
具体代码以下:git

print("Please enter first 17 digits of your ID number:")
id17 <- readLines("stdin",n = 1)  # scan input

aa = unlist(strsplit(as.character(id17),''))
if(!(all(aa %in% seq(0,9,1)))) stop("All must be number!")  # ensure inputs are digits

if(nchar(id17) != 17) stop("must be 17 digits!")  # ensure 17

sumid = 0
j = 0
for (i in c(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2)){
    j = j + 1
    sumid = sumid + as.numeric(aa[j]) * i
}

modid = sumid %% 11

if (modid == 0) las = 1
if (modid == 1) las = 0
if (modid == 2) las = 'X'
if (modid == 3) las = 9
if (modid == 4) las = 8
if (modid == 5) las = 7
if (modid == 6) las = 6
if (modid == 7) las = 5
if (modid == 8) las = 4
if (modid == 9) las = 3
if (modid == 10) las = 2

output1 = paste("The last digit of your ID number is :", las)
IDnumber = paste0(as.character(id17),las)
output2 = paste('Your ID number is:',IDnumber)
print (output1)
print (output2)

此代码最好保存成文本(如 ID.R),再terminal或者CMD中经过R命令运行脚本(确保R程序已经加入到环境变量中):
$ Rscript ID.R
或者算法

Rscript ID.Ride

而后就能够获得最后一位校验码。code

以文章开头的身份证号码为例:blog

居民身份证最后一位数字验证

相关文章
相关标签/搜索