Adsense Script

2011年6月17日 星期五

檢驗香港身份證號碼真確性? (計算方法如下)

因工作關係..無啦啦要幫手寫個程式係數據庫(Oracle database) check HKID 個真確性.


順便公開下檢驗香港身份證號碼個數式比大家


而最後個位其實係Check digit


搵左5 mins 網上都無得抄...


不如自己寫番個仲好...前後用左20 分鐘就寫完啦


===============================================



智能身份證正面


 


例子:


香港身份證號碼有一個英文字母,一個六位數和一個加上括號的檢驗位。

你可用以下方法計算身份證號碼以確定身份證號碼的真確性。
請把身份證號上的英文字母用數字代表,如
A = 10 B = 11 C = 12 D = 13 E = 14 F = 15
G = 16 H = 17 I = 18 J = 19 K = 20 L = 21
M = 22 N = 23 O = 24 P = 25 Q = 26 R = 27
S = 28 T = 29 U = 30 V = 31 W = 32 X = 33
Y = 34 Z = 35

方法:
324 + 第一位x8 + 第二位x7 + 第三位x6 + 第四位x5 + 第五位x4 + 第六位x3 + 第七位x2 = 總和
總和除以 11 得到餘數
11 - 餘數 = 檢驗位 (Check Digit)

例子:
身份證號碼:E364912(5)
(註:E 是第一位把它換成 14)

324 + 14x8 + 3x7 + 6x6 + 4x5 + 9x4 + 1x3 + 2x2 = 556

556 / 11 得餘數 6

11 - 6 = 5

所以這身份證號碼正確。



=============================================

Oracle database PL/SQL Program to check HKID digit:

 


 

select  

  11 - mod 

(

324

+decode(SUBSTR (HKID, 1, 1),

'1', 1,

'2', 2,

'3', 3,

'4', 4,

'5', 5,

'6', 6,

'7', 7,

'8', 8,

'9', 9,

'A', 10, 

'B', 11, 

'C', 12, 

'D', 13, 

'E', 14, 

'F', 15,

'G', 16, 

'H', 17, 

'I', 18, 

'J', 19, 

'K', 20, 

'L', 21,

'M', 22, 

'N', 23, 

'O', 24, 

'P', 25, 

'Q', 26, 

'R', 27,

'S', 28, 

'T', 29, 

'U', 30, 

'V', 31, 

'W', 32, 

'X', 33,

'Y', 34, 

'Z', 35,

                0 )   * 8

+   to_number(substr(HKID,2,1))  * 7             

+     to_number(substr(HKID,3,1)) * 6

+   to_number(substr(HKID,4,1)) * 5

+     to_number(substr(HKID,5,1)) * 4

+     to_number(substr(HKID,6,1)) * 3

+     to_number(substr(HKID,7,1)) * 2

,11)

-- check digital is to_number(substr(HKID,9,1)) * 1

from

(

select 'E364912(5)' HKID from

dual

);

 

- copy the result with last digital to_number(substr(HKID,9,1)) * 1

- or result - to_number(substr(HKID,9,1)) * 1 = 0

 

2 則留言:

  1. Very Nice ! Thanks for sharing !

    回覆刪除
  2. Hi, you are very interesting....I am glad to come across your blog when browsing the topic 'HK ID'.

    回覆刪除