2009年4月21日 星期二

身分證產生器|身份證產生器|生份證產生器

身份證產生器
加入書籤: 緣由

阿福有天說 : 俊x學C七天就做出ID產生器了耶

學了這麼久C的我怎麼可以沒有寫出ID產生器

這件事情一直困擾了我好久

於是有一天

我生氣了

趁著媽祖婆在床上看俊x的拿手語言

在他背後捅他一刀

於是 不能輸系列開始了





#include
#include
#include


int main(void)
{
int i = 0,s[7] = {0},si[7] = {0},sexsw = 0,sex = 0,city = 0,city2 = 0,sum = 0,check = 0;
char taiwan_city;
fflush(stdin);
srand(time(NULL));
printf("男 : 1 女 : 2\n");
scanf("%d",&sex);
printf("請輸入縣市 : (大寫)\n");
printf("A 台北市, B 台中市, C 基隆市, D 台南市, E 高雄市, F 台北縣, G 宜蘭縣,\n");
printf("H 桃園縣, I 嘉義市, J 新竹縣, K 苗栗縣, L 台中縣, M 南投縣, N 彰化縣,\n");
printf("O 新竹市, P 雲林縣, Q 嘉義縣, R 台南縣, S 高雄縣, T 屏東縣, U 花蓮縣,\n");
printf("V 台東縣, W 金門縣, X 澎湖縣, Y 陽明山管理局, Z 連江縣\n");
fflush(stdin);
scanf("%c",&taiwan_city);
if (taiwan_city > 97)
taiwan_city = taiwan_city - 32;
switch(taiwan_city)
{
case 'A' : city = 10;
break;
case 'B' : city = 11;
break;
case 'C' : city = 12;
break;
case 'D' : city = 13;
break;
case 'E' : city = 14;
break;
case 'F' : city = 15;
break;
case 'G' : city = 16;
break;
case 'H' : city = 17;
break;
case 'I' : city = 34;
break;
case 'J' : city = 18;
break;
case 'k' : city = 19;
break;
case 'L' : city = 20;
break;
case 'M' : city = 21;
break;
case 'N' : city = 22;
break;
case 'O' : city = 35;
break;
case 'P' : city = 23;
break;
case 'Q' : city = 24;
break;
case 'R' : city = 25;
break;
case 'S' : city = 26;
break;
case 'T' : city = 27;
break;
case 'U' : city = 28;
break;
case 'V' : city = 29;
break;
case 'W' : city = 32;
break;
case 'X' : city = 30;
break;
case 'Y' : city = 31;
break;
case 'Z' : city = 33;
break;
}
for (i = 0;i < 7;i++)
s[i] = rand () % 10;
sum = ( city / 10 ) + ( ( city % 10 ) * 9 ) + ( sex * 8 ) +( s[0] * 7 ) +
( s[1] * 6 ) + ( s[2] * 5 ) + ( s[3] * 4 ) + ( s[4] * 3) +
( s[5] * 2) + ( s[6] * 1);
sum = sum % 10;
check = 10 - sum;
printf("%c",taiwan_city);
printf("%d%d%d%d%d%d%d%d%d",sex,s[0],s[1],s[2],s[3],s[4],s[5],s[6],check);
system("pause");
}

身份證產生器其實不難只是一公式而已

(城市號碼 / 10) + (城市號碼 * 9) + (性別 * 8) + (第一碼 * 7) + (第二碼 * 6) +...去產生最後一個檢查碼

最後感謝俊x大大的C讓我學會了pointer + struct

小心了...我要開始看C++了

身分證字號產生器|身分證字號產生|身分正產生器

身 分 證 驗 證 驗 證 產 生 器
 
身 分 證 驗 證  
身 分 證 產 生 性別:
亂數 男 女 登記地:
亂數 台北市台中市基隆市台南市高雄市台北縣宜蘭縣桃園縣嘉義市新竹縣苗栗縣台中縣南投縣彰化縣新竹市雲林縣嘉義縣台南縣高雄縣屏東縣花蓮縣台東縣金門縣澎湖縣 陽明山連江縣 隨機幾份 1份2份3份4份5份6份7份8份9份10份11份12份13份14份15份16份17份18份19份20份21份22份23份24份25份26份27份 28份29份30份31份32份33份34份35份36份37份38份39份40份41份42份43份44份45份46份47份48份49份50份51份 52份53份54份55份56份57份58份59份60份61份62份63份64份65份66份67份68份69份70份71份72份73份74份75份 76份77份78份79份80份81份82份83份84份85份86份87份88份89份90份91份92份93份94份95份96份97份98份99份 100份
驗 證 規 則
第一碼英文字代表該組號碼配賦時所屬的縣市﹝非出生地﹞,

第二碼數字1為男生2為女生,

第3碼至第10碼為任意一串數字,

但含英文字之全部號碼可用公式加以核算該組號碼是否正確,

例如R123456783,R=25,

檢查公式是:2+5*9+1*8+2*7+3*6+4*5+5*4+6*3+7*2+8*1=167,

其167再除以10求餘數結果。

其餘數結果的個位數為7以10減去得3(檢查碼)。

其餘數結果的個位數為0時,則得0(檢查碼)。

A=10 B=11 C=12 D=13 E=14 F=15 G=16 H=17 J=18 K=19 L=20 M=21 N=22

P=23 Q=24 R=25 S=26 T=27 U=28 V=29 W=30 X=31 Y=32 Z=33 I=34 O=35

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連江縣

2008年9月15日 星期一

生份證產生器,生份證製造器

生份證產生器
http://www.seotoday.com.cn/cardjava.html
底下說明一下如果要寫一個生份證產生器的程式需要的知道的字號產生規則,才能寫出一個可用的程式,其實規則並不複雜,也就是說包括戶籍地驗證碼還有其它的數字的組合而已,而大陸的生份證字號規則又不一樣。

我們現在來看一下整個規則,生份證產生器的相關規則如後所述,第一個就是英文字母,A代表您戶籍地代碼的十位數字,B代表個位數字,CDEFGHIJK分別代表著緊接而來的九個號碼。


定義生份證產生器的函數

然後我們來定義函數:f(A~K)=A+9B+8C+7D+6E+5F+4G+3H+2I+J+K,當函數值f(A~K)=10M的時候,M屬於常數,也就是說,該值為10的倍數的時候,那這組身分證字號就是可以使用的。

我們來看一個實例比較清楚生份證產生器實際要如何來寫:比方這個 A123456789 生份證字號,我們可以將它列成 10123456789,不知道A為什麼是10的話,可以參考另外一篇,1+9x0+8x1+7x2+6x3+5x4+4x5+3x6+2x7+8+9=130,130是10的倍數,也就是說這一組是可以使用的,很多網頁型的都可以直接下載來用。

再舉一個實例:B284793817 => 11284793817,這也是可以用的,你可以自己去算一下為什麼這個生份證字號可以使用。仔細看看函數,J跟K的加權值都是1,也就是說J+1並且 K-1的話,那麼這一組字號也是可以使用的,所以說基本上每一組生分證產生器字號加減9號就又是另外一組。生份證產生器便是使用上述規則亂數產生號碼。

生份證產生器字號字母所代表的意義

1. 第一碼英文字代表該組號碼配賦時所屬的縣市﹝非出生地﹞,
2. 第二碼數字1為男生2為女生,
3. 第3碼至第10碼為任意一串數字,
4. 但含英文字之全部號碼可用公式加以核算該組號碼是否正確,

例如R123456783,R=25,生份證產生器檢查公式是:2+5*9+1*8+2*7+3*6+4*5+5*4+6*3+7*2+8*1=167,其167再除以10求餘數結果。其餘數結果的個位數為7以 10減去得3(檢查碼)。其餘數結果的個位數為0時,則得0(檢查碼)。

所以生份證產生器就是根據這些簡單的規則所寫出來的。其實看起來並不複雜難懂。