中華人民共和國居民身份證共有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