close

內容
很多銀行及公司設立了電話客服中心來服務他們的客戶。為了加速身分的查核,常常會要求打電話進來的客戶輸入他的身分證號碼。可是電話上只有數字鍵,要輸入身分證號碼的第一個字母有點麻煩,因此有的語音系統會要求來電者輸入後 9 碼,再根據後 9 碼來推算可能的英文字母。
很多人都知道,身分證號碼的最後一碼是「檢查碼」,它是用前 9 碼所推算出來的,其推算的規則如下:
  1.先依照下表將英文字母轉換為 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
  2.由左至右,第一位乘 1,第二位乘 9,第三位乘 8,第四位乘 7...,以此類推,最後一位乘 1。
  3.求各位相對數字乘積的總和 s。
  4.求 s 的個位數 m。
  5.檢查碼 c = 10 - m 。
假設某人的身份證號碼前 9 碼為 F13024567,那麼他的最後一位檢查碼的計算過程如下:
    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 碼。     將可能的第一位大寫字母依字母順序輸出於一行。

 

C++解答

//請參考 a020身分證驗證
//先將題目給得數字計算好
//再加上A到Z的值
//看總和是否為10的倍數 
#include <iostream>
#include <string>
using namespace std;
int main ()
{
	string str1;
	int sum=0;
	int cn1,cn2,cn3,cn4;
	
	//用來轉換的
	char ch [26]={'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 as[26]={10,11,12,13,14,15,16,17,34,18,19,20,21,22,35,23,24,25,26,27,28,29,32,30,31,33};
	
	while(cin>>str1)
	{
		//計算題目的前八個數字 
		int t=8;
		for(int i=0;i<=8;i++)
		{
			cn1=str1[i]-'0'; //string的數字不能直接轉為int 因為會變成ASCII碼 此時直接檢調0的ASCII即得到想要的數字 
			cn1=cn1*t;
			sum=sum+cn1;
			t--;
		} 
		sum+=(str1[8]-'0');//加上最後的數字 
		
		//把A到Z轉成相對應的數字 
		for(int i=0;i<=25;i++) 
		{
			cn2=(as[i]%10)*9;
			cn3=as[i]/10;
			cn4=cn3+cn2;
			
			//如果可整除10則輸出該英文字 
			if((sum+cn4)%10==0)
			{
				cout<<ch[i];
			}
		}
		cout<<endl;
		sum=0;//記得最後歸零不然執行第2便會錯 
	}
	return 0;
}
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 豪CO 的頭像
    豪CO

    程式道路,必為豐富

    豪CO 發表在 痞客邦 留言(0) 人氣()