使用hql驗證身份證號碼的合法性

2021-09-25 17:59:07 字數 2265 閱讀 1305

一、身份證號碼的組成規則

(1)第1、2位數字表示:所在省份的**;

(2)第3、4位數字表示:所在城市的**;

(3)第5、6位數字表示:所在區縣的**;

(4)第7、8、9、10位代表出生年;

(5)第11位、12位表示:出生月;

(6)第13位、14位表示:出生日;

(7)第15、16位表示:同年同月同日同地區出生的順序;

(8)第17位表示性別:奇數表示男性,偶數表示女性;

(9)第18位數字是校檢碼:0-9 x;

二、使用hql進行身份證號碼的校驗

select * from

(select trim(upper(id)) idcard from id_info) t1

where

-- 1. 身份證號碼位數不正確

length(idcard) <> 18

-- 2. 省份**不正確

or substr(idcard,1,2) not in ('11','12','13','14','15','21','22','23','31','32','33','34','35','36','37','41','42',

'43','44','45','46','50','51','52','53','54','61','62','63','64','65','71','81','82','91')

-- 3. 身份證號碼的正規表示式判斷,注意hql中if的寫法是if(expression, t result1, t result2)

or (

-- 如果為閏年,則執行4中的正規表示式,如果為平年則執行5中的正規表示式

if(pmod(cast(substr(idcard, 7, 4) as int),400) = 0 or (pmod(cast(substr(idcard, 7, 4) as int),100) <> 0

and pmod(cast(substr(idcard, 7, 4) as int),4) = 0),

-- 4. 閏年

if(idcard regexp '^[1-9][0-9]19[0-9]((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|' ||

'[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9][0-9x]$',1,0),

-- 5. 平年

if(idcard regexp '^[1-9][0-9]19[0-9]((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|' ||

'[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9][0-9x]$',1,0)

)) = 0

-- 6. 校驗位不正確

orsubstr('10x98765432',

pmod((cast(substr(idcard,1,1) as int)*7+

cast(substr(idcard,2,1) as int)*9+

cast(substr(idcard,3,1) as int)*10+

cast(substr(idcard,4,1) as int)*5+

cast(substr(idcard,5,1) as int)*8+

cast(substr(idcard,6,1) as int)*4+

cast(substr(idcard,7,1) as int)*2+

cast(substr(idcard, 8,1) as int)*1+

cast(substr(idcard, 9,1) as int)*6+

cast(substr(idcard,10,1) as int)*3+

cast(substr(idcard,11,1) as int)*7+

cast(substr(idcard,12,1) as int)*9+

cast(substr(idcard,13,1) as int)*10+

cast(substr(idcard,14,1) as int)*5+

cast(substr(idcard,15,1) as int)*8+

cast(substr(idcard,16,1) as int)*4+

cast(substr(idcard,17,1) as int)*2

),11)+1,1) <> substr(idcard,18,1);

身份證號碼驗證

說明 驗證身份證的有效性 引數 cid 身份證號碼 返回 地方 出生時間 性別 private string checkcidinfo string cid if cid.length 18 char c cid cid.length 1 bool last false if c 0 c 9 c a...

驗證身份證號碼

好久沒更新了,今天簽到啦。感覺這個驗證挺重要的,也挺常用的,所以分享給需要的朋友。驗證身份證號碼,在網上找到的好東東 function checkidcard idcard var idcard,y,jym var s,m var idcard array new array idcard arra...

驗證身份證號碼

var idcardnoutil powers 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 paritybit 1 0 x 9 8 7 6 5 4 3 2 genders checkaddresscode function addresscode test address...