中华人民共和国居民身份证共有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