身份證號碼升級

問題描述
  從1999年10月1日開始,公民身份證號碼由15位數字增至18位。(18位身份證號碼簡介)。升級方法爲:
  一、把15位身份證號碼中的年份由2位(7,8位)改成四位。
  二、最後添加一位驗證碼。驗證碼的計算方案:
  將前 17 位分別乘以對應係數 (7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2) 並相加,而後除以 11 取餘數,0-10 分別對應 1 0 x 9 8 7 6 5 4 3 2。
  請編寫一個程序,用戶輸入15位身份證號碼,程序生成18位身份證號碼。假設全部要升級的身份證的四位年份都是19××年
輸入格式
  一個15位的數字串,做爲身份證號碼
輸出格式
  一個18位的字符串,做爲升級後的身份證號碼
樣例輸入
110105491231002
樣例輸出
11010519491231002x
數據規模和約定
  不用判斷輸入的15位字符串是否合理

#include<stdio.h>
int main()
{
int c[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
char d[11]={'1','0','x','9','8','7','6','5','4','3','2'};
int i,j,a[15],b[18],sum=0,l;
char x[15];
gets(x);
for(i=0;i<15;i++)
{
a[i]=x[i]-'0';//注意:這裏的做用是把字符數組轉換爲數字數組,以便接下來的運算。
}
for(j=0,i=0;j<17,i<17;j++,i++)
{
if(i<6)
{
b[j]=a[i];
}
if(i==6)
{
b[j]=1;
}
if(i==7)
{
b[j]=9;
}
if(i>7)
{
b[j]=a[i-2];
}
}
for(j=0;j<17;j++)
{
sum=sum+b[j]*c[j];
}
l=sum%11;
for(j=0;j<17;j++)
printf("%d",b[j]);
printf("%c\n",d[l]);
return 0;
} 數組

相關文章
相關標籤/搜索