声明:所有转载需要注明 URL 原始链接。这些链接应当来自于www.csdn.com。
这里介绍的是我在net上搜集摘抄的。可能不准。也可能失效。
大概年份在 1995 左右。有没有新的规定,别见笑,我还没查到。
写这篇文档的目的是向我们的程序员介绍编码规则,以便需要
证件识别的程序适宜台湾地区使用,扩大程序的应用空间。
技术人谈技术,乐此不疲。
说正题:
1、简述:
证件编码 由 10 位组成。
首位是英文字母,代表区域划分。有对应的数字代号表示。
末位是校验用,用以验证证件编码的有效性。
2、首位字母,代号,区域 对应表:
/^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^/
╓------------------------------------------╖
║ 字母、代号、区域 对应表 ║
╟====┬=======┬=======┬===╢
║ 代号 | 繁体 | 简体 | 字 ║
╟====+========+========+===╢
║ 10 | 臺北市 | 台北市 | A ║
╟====+========+========+===╢
║ 11 | 臺中市 | 台中市 | B ║
╟====+========+========+===╢
║ 12 | 基隆市 | 基隆市 | C ║
╟====+========+========+===╢
║ 13 | 臺南市 | 台南市 | D ║
╟====+========+========+===╢
║ 14 | 高雄市 | 高雄市 | E ║
╟====+========+========+===╢
║ 15 | 臺北縣 | 台北县 | F ║
╟====+========+========+===╢
║ 16 | 宜蘭縣 | 宜兰县 | G ║
╟====+========+========+===╢
║ 17 | 桃園縣 | 桃园县 | H ║
╟====+========+========+===╢
║ 18 | 新竹縣 | 新竹县 | J ║
╟====+========+========+===╢
║ 19 | 苗栗縣 | 苗栗县 | K ║
╟====+========+========+===╢
║ 20 | 臺中縣 | 台中县 | L ║
╟====+========+========+===╢
║ 21 | 南投縣 | 南投县 | M ║
╟====+========+========+===╢
║ 22 | 彰化縣 | 彰化县 | N ║
╟====+========+========+===╢
║ 23 | 雲林縣 | 云林县 | P ║
╟====+========+========+===╢
║ 24 | 嘉義縣 | 嘉義县 | Q ║
╟====+========+========+===╢
║ 25 | 臺南縣 | 台南县 | R ║
╟====+========+========+===╢
║ 26 | 高雄縣 | 高雄县 | S ║
╟====+========+========+===╢
║ 27 | 屏東縣 | 屏東县 | T ║
╟====+========+========+===╢
║ 28 | 花蓮縣 | 花莲县 | U ║
╟====+========+========+===╢
║ 29 | 臺東縣 | 台东县 | V ║
╟====+========+========+===╢
║ 30 | 澎湖縣 | 澎湖县 | X ║
╟====+========+========+===╢
║ 31 | 陽明山 | 陽明山 | Y ║
╟====+========+========+===╢
║ 32 | | | W ║
╟====+========+========+===╢
║ 33 | | | Z ║
╟====+========+========+===╢
║ 34 | 嘉義市 | 嘉義市 | I ║
╟====+========+========+===╢
║ 35 | 新竹市 | 新竹市 | O ║
╙====┴=======┴=======┴===╜
(表一)
3、编号计算:
3.1描述
第一步:按照 表一 将字母转换为数字。
第二步:新组成的编号对应位乘以 1987654321的对应位。
第三步:将所有对应位乘的乘积作累加和。
第四步:将累加和 mod 10 得模数。
第五步:10 - 模数 得到校验码。
第六步:将校验码与编码的末位作比较。
ok.
3.2例子
令 编号为: A 1 0 0 9 8 7 6 3 8
查 表一 知:
A --->10.
组成新编号 1 0 1 0 0 9 8 7 6 3 8
对应位相乘:
1 0 1 0 0 9 8 7 6 3 8 新编号
* 1 9 8 7 6 5 4 3 2 1 常數
-----------------------------------------------------
(1) (0) (8) (0) (0) (45) (32) (21) (12) (3) 对应位乘积
新数相加
X = 1 + 0 + 8 + 0 + 0 + 45 + 32 + 21 + 12 + 3
X = 122
计算模数
M = X % 10 = 122 % 10 = 2
计算校验码
Check_Code = 10 - M = 10 - 2 = 8
编号正确。
4、代码,字母 速算 法:
令字母表:ABCDEFGHJKLMNPQRSTUVXYWZIO
顺序编号:12345678....
则相应的代码 = 字母表编号 + 9 .
例如,C , 3 + 9 = 12 ,查 表一 正确。
5、C 编码:
bool
_stdcall
TaiWanUserID(
char *s
)
{
char *List="ABCDEFGHJKLMNPQRSTUVXYWZIO";
char *p;
int x;
//入口检查
if ( strlen(s)!=10 )
{
return false;
}
p=strchr(List,toupper(*s));
if (p==NULL)
{
return false;
}
x=(int)(p-List);
x=x %10 *9 + x/10;
p=s+1;
if ( *p !='1' && *p != '2')
{
return false;
}
for (int i=1;i<9;i++)
{
if (isdigit(*p))
{
x+=(*p++-'0')*(9-i);
}
else
{
return false;
}
}
x=9 - x%10;
return ( x==(*p-'0') );
}
参考:
張朝植, "身分證字號識別碼辨認之巨集設計", 倚天雜誌, DEC.1993, p156
本文链接:https://my.lmcjl.com/post/12070.html
4 评论