台灣身分證 格式 |
|
flyup
資深會員 發表:280 回覆:508 積分:385 註冊:2002-04-15 發送簡訊給我 |
身份證字號檢查規則
1.台灣身分證字號共有十碼,我們就將它表示成... N1 N2 N3 N4 N5 N6 N7 N8 N9 N10
2.N1 : 一定是一個大寫英文字母,代表戶籍地 ex.A是台北市 B是台中市 C是基隆市......
3.N2 : 性別欄位:1為男性 2為女性
4.N3~N9 : 流水號
5.N10 : 檢測位元,首先要將第一個英文字轉換成數值
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 ==>I,O
6.然後用下列算式計算,若餘數為 0 則為正確的身分證字號(N1的十位數 N1的個位數x9 N2x8 N3x7 N4x6 N5x5 N6x4 N7x3 N8x2 N9 N10)÷10 ----------------
局局棋盤步步新,
變化無常平常待。
人生相處平常心,
無憂無慮心事成。
---------------- 發表人 - flyup 於 2002/12/19 11:46:01
|
flyup
資深會員 發表:280 回覆:508 積分:385 註冊:2002-04-15 發送簡訊給我 |
國民身份證統一編號計算公式 :
一.先依照上表將英文字母代號換為數字。
二.由左至右,第一位乘一,第二位乘九, 第三位乘八, 第四位乘七.......
最後一位乘一。
三.將各位相對數字所乘之積相加。
四.將上式(三)所得之和除以十求得餘數。
五.以十減去上式(四)所得餘數即為檢查號碼。 範例:
F21234567
一.換算為 1521234567
二.(1*1) (5*9) (2*8) (1*7) (2*6) (3*5) (4*4) (5*3) (6*2) (7*1)
三.= 146
四.146/10 = 14 .... 6
五.10 - 6 = 4 (檢查號碼) 心得: 順序加九等於代號
^^^^^^^^^^^^^^^^^^^^^^^
字母 A B C D E F G H J K L M N P Q R S T U V X Y W Z I O
順序 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
代號 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 ----------------
局局棋盤步步新,
變化無常平常待。
人生相處平常心,
無憂無慮心事成。
----------------
|
flyup
資深會員 發表:280 回覆:508 積分:385 註冊:2002-04-15 發送簡訊給我 |
提供一個 Pascal 的程式, 希望有所幫助。 function CorrectIDN(c:string):boolean;
const
IDNIDX : array['A'..'Z'] of byte =
(1,2,3,4,5,6,7,8,25,9,10,11,12,13,26,14,15,16,17,18,19,20,23,21,22,24); IDNTable : array[1..26] of byte = (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);
var V:integer;
begin
if c[1] in ['A'..'Z'] then begin
V :=
IDNTable[IDNIDX[c[1]]] div 10 (IDNTable[IDNIDX[c[1]]] mod 10) * 9
(byte(c[2])-48) * 8 (byte(c[3])-48) * 7 (byte(c[4])-48) * 6
(byte(c[5])-48) * 5 (byte(c[6])-48) * 4 (byte(c[7])-48) * 3
(byte(c[8])-48) * 2 byte(c[9])-48 byte(c[10])-48;
CorrectIDN := (c[0] = #10) and ((c[2] = '1') or (c[2] = '2')) and (V
div 10 = V / 10);
end
else
CorrectIDN := False;
end; ----------------
局局棋盤步步新,
變化無常平常待。
人生相處平常心,
無憂無慮心事成。
----------------
|
flyup
資深會員 發表:280 回覆:508 積分:385 註冊:2002-04-15 發送簡訊給我 |
身份證驗證程式---C 語言程式 #include 〈ctype.h〉
#include 〈iostream.h〉
#include 〈string.h〉 int CheckID(char *); void main(void)
{
char inbuf[80];
cout << " A123456789 \n: "
cin >> inbuf;
cout << (CheckID(inbuf) ? "ok" : "invalid") << endl;
} /* main */ int CheckID(char *s)
{
char *p, *LEAD="ABCDEFGHJKLMNPQRSTUVXYWZIO"
if (strlen(s)!=10 || (p=strchr(LEAD, toupper(*s)))==NULL)
return NULL;
int x = p - LEAD;
x = x/10 + x*9;
p = s + 1;
if (*p!='1' && *p!='2') return NULL;
for(int i=1; i<9; i )
if (isdigit(*p)) x = (*p -'0')*(9-i); else return NULL;
x = 9 - x;
return (x==*p-'0');
} /* CheckID */ ----------------
局局棋盤步步新,
變化無常平常待。
人生相處平常心,
無憂無慮心事成。
---------------- 發表人 - flyup 於 2002/12/22 23:41:03
|
00156
高階會員 發表:45 回覆:195 積分:112 註冊:2002-06-01 發送簡訊給我 |
這裡還有一個函數,希望有幫助囉...
function CkIDNum(idn:string):boolean; const LetterCode:array[0..25] of byte = (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); var cksum:integer; i:ShortInt; { *Note: 男生=第二碼為1 (即字母後的那一位) 女生=第二碼為2 (即字母後的那一位) } begin Result:=false; if length(idn)<>10 then Exit; //驗證總位數 i:=Ord(UpCase(idn[1]))-65; //驗證首位字母...(取得對應值在LetterCode的位置、確認為A~Z之一、計算加權值) if ((i<0) or (i>25)) then Exit; cksum:=(LetterCode[i] div 10) (9*LetterCode[i] mod 10); for i:=1 to 8 do cksum:=cksum StrToInt(idn[i 1])*(9-i); //數字部份加權加總 if (cksum StrToInt(idn[10])) mod 10 = 0 then Result:=true; //驗證檢碼(最後一碼):與cksum的和必須被10整除 end; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |