居民身份證最後一位數字驗證

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

居民身份證最後一位數字驗證

相關文章
相關標籤/搜索