內容 :
很多銀行及公司設立了電話客服中心來服務他們的客戶。為了加速身分的查核,常常會要求打電話進來的客戶輸入他的身分證號碼。可是電話上只有數字鍵,要輸入身分證號碼的第一個字母有點麻煩,因此有的語音系統會要求來電者輸入後 9 碼,再根據後 9 碼來推算可能的英文字母。
很多人都知道,身分證號碼的最後一碼是「檢查碼」,它是用前 9 碼所推算出來的,其推算的規則如下:
F 1 3 0 2 4 5 6 7 1 5 1 3 0 2 4 5 6 7
根據上面的規則,A12345678、M12345678 和 W12345678 這三個號碼的檢查碼都是 9。因此,如果在電話上所輸入的後 9 碼是 123456789 時,它的第一位英文字母可能是 A,也可能是 M 或 W。
很多人都知道,身分證號碼的最後一碼是「檢查碼」,它是用前 9 碼所推算出來的,其推算的規則如下:
- 先依照下表將英文字母轉換為 2 位數字,再加上第 2 到第 9 位的 8 位數字一共有 10 位數字。
台北市 A 10 彰化縣 N 22
台中市 B 11 新竹市 O 35
基隆市 C 12 雲林縣 P 23
台南市 D 13 嘉義縣 Q 24
高雄市 E 14 台南縣 R 25
台北縣 F 15 高雄縣 S 26
宜蘭縣 G 16 屏東縣 T 27
桃園縣 H 17 花蓮縣 U 28
嘉義市 I 34 台東縣 V 29
新竹縣 J 18 金門縣 W 32
苗栗縣 K 19 澎湖縣 X 30
台中縣 L 20 陽明山 Y 31
南投縣 M 21 連江縣 Z 33 - 由左至右,第一位乘 1,第二位乘 9,第三位乘 8,第四位乘 7...,以此類推,最後一位乘 1。
- 求各位相對數字乘積的總和 s。
- 求 s 的個位數 m。
- 檢查碼 c = 10 - m 。
F 1 3 0 2 4 5 6 7 1 5 1 3 0 2 4 5 6 7
×1 ×9 ×8 ×7 ×6 ×5 ×4 ×3 ×2 ×1
1 + 45 + 8 + 21 + 0 + 10 + 16 + 15 + 12 + 7 = 135檢查碼 = 10 - (135 % 10) = 5根據上面的規則,A12345678、M12345678 和 W12345678 這三個號碼的檢查碼都是 9。因此,如果在電話上所輸入的後 9 碼是 123456789 時,它的第一位英文字母可能是 A,也可能是 M 或 W。
輸入說明 :
輸入有若干筆測試資料,每筆一行,含有一個身份證號碼的後 9 碼。
輸出說明 :
對於每筆測試資料,將可能的第一位大寫字母依字母順序輸出於一行。
範例輸入 :
130245675 123456789
範例輸出:
FS AMW
提示 :
標籤:
import java.util.*;
public class a054 {
public static void main(String[] args) {
int[] eg={1,10,19,28,37,46,55,64,39,73,82,2,11,20,48,29,38,47,56,65,74,83,21,3,12,30};
char[] ch={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
int i;
Scanner sc= new Scanner(System.in);
while(sc.hasNext()){
int[] id=new int[9];
String str;
str=sc.nextLine();
for(i=0;i<9;i++){
id[i]=str.charAt(i)-48;
}
int total=0,check;
for(i=0;i<8;i++){
total+=(id[i]*(8-i));
}
id[8] = (id[8] ==0) ? 10 : id[8]; //10-0 10的問題
for(i=0;i<26;i++){
if(10-((total+eg[i])%10)==id[8])
System.out.print(ch[i]);
}
System.out.println();
}
}
}
沒有留言:
張貼留言