239
汽車大全
PostgreSQL 生成隨機身份證ID
標簽
PostgreSQL , 身份證號生成
背景
生成隨機身份證號。
規則
前1、2位數字表示:所在省(直轄市、自治區)的代碼;
第3、4位數字表示:所在地級市(自治州)的代碼;
第5、6位數字表示:所在區(縣、自治縣、縣級市)的代碼;
第7 - 14位數字表示:出生年、月、日;
第15、16位數字表示:所在地的派出所的代碼;
第17位數字表示性別:奇數表示男性,偶數表示女性;
第18位數字是校檢碼:也有的說是個人信息碼,不是隨計算機的隨機產生,它是用來檢驗身份證的正確性。校檢碼可以是0—9的數字,有時也用x表示。作為尾號的校驗碼,是由號碼編製單位按統一的公式計算出來的,如果某人的尾號是0-9,都不會出現X,但如果尾號是10,那麼就得用X來代替,因為如果用10做尾號,那麼此人的身份證就變成了19位。X是羅馬數字的10,用X來代替10,可以保證公民的身份證符合國家標準。
方法
從簡,隻是用於測試。
create or replace function gen_id(
a date,
b date
)
returns text as $$
select lpad((random()*99)::int::text, 2, '0') ||
lpad((random()*99)::int::text, 2, '0') ||
lpad((random()*99)::int::text, 2, '0') ||
to_char(a + (random()*(b-a))::int, 'yyyymmdd') ||
lpad((random()*99)::int::text, 2, '0') ||
random()::int ||
(case when random()*10 >9 then 'X' else (random()*9)::int::text end ) ;
$$ language sql strict;
postgres=# select gen_id('1900-01-01', '2017-10-16');
gen_id
--------------------
808866195306076311
(1 row)
參考
https://jingyan.baidu.com/article/72ee561abd962fe16038df48.html
最後更新:2017-10-28 23:34:27