1. 程式人生 > >〖中華人民共和國國家標準 GB 11643-1999〗 身份證升位

〖中華人民共和國國家標準 GB 11643-1999〗 身份證升位

根據〖中華人民共和國國家標準 GB 11643-1999〗中有關公民身份號碼的規定,公民身份號碼是特徵組合碼,由十七位數字本體碼和一位數字校驗碼組成。排列順序從左至右依次為:六位數字地址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。校驗碼根據組合碼的前十七位數字,採用ISO7064:1983,MOD 11-2校驗碼系統,演算法利用 TSQL描述如下:

update tablename set sfzhcolumn=
substring(sfzh,1,6)+'19'+substring(sfzh,7,9)+
case convert(int,substring(sfzh,1,1)

)
*7+convert(int,substring(sfzh,2,1))*9+
convert(int,substring(sfzh,3,1))
*10+convert(int,substring(sfzh,4,1))*5+
convert(int,substring(sfzh,5,1))
*8+convert(int,substring(sfzh,6,1))*4+1*2+9*1+
convert(int,substring(sfzh,7,1))
*6+convert(int,substring(sfzh,8,1))*3+
convert(int,substring(sfzh,9,1))
*7+convert(
int,substring(sfzh,10,1))*9+
convert(int,substring(sfzh,11,1))
*10+convert(int,substring(sfzh,12,1))*5+
convert(int,substring(sfzh,13,1))
*8+convert(int,substring(sfzh,14,1))*4+
convert(int,substring(sfzh,15,1))
*% 11
when 0 then '1' when 1 then '0' when 2 then 'X' when 3 then '9'
when 4 then '8' when 5 then
 '7' when 6 then '6' when 7 then '5'
when 8 then '4' when 9 then '3' when 10 then '2'

   注:該演算法修改引自《計算機世界報》四川省綿陽市胥永康的“公民身份號碼升位在SYBASE資料庫上的實現”文章,特別緻謝。語句中CASE僅適用於Sybase11.5以上,%為Sybase取模運算子

   應用系統和生產系統中身份證由於各種原因,升位可能必須考慮以下幾個問題,特別是百萬級資料庫應用系統:(1)錯號(長度不足;日期部分非法;含有非數字字元等)(2) 對於大量資料,用單一的UPDATE語句可能造成日誌和臨時空間的溢位(3)升位必須兼顧Server(Sybase)和Client(PB)端,Client端同時必須相容15、17、18位身份號,同時具有自校驗(4)在升位原資料時,根據實際情況應該先刪除有關索引或觸發器,保證升位的快速準確,升位結束後再建立

   Sybase升位儲存過程:

Sybase Procedure
//輸入引數:@sfz_input 需要升位的身份證
//輸入引數:@sfz_output 升位後的身份證
//根據實際應用,該過程可以直接呼叫或內嵌

create procedure p_sfzto18 @sfz_input
varchar(18),@sfz_output varchar(18) output
as
declare @sfz_doing varchar(18),
@count integer,@valid integer

select @sfz_doing = rtrim(ltrim(@sfz_input))
//將輸入身份證賦給中間處理變數
if (char_length(@sfz_doing) < > 15) and
(char_length(@sfz_doing) < > 17) and
(char_length(@sfz_doing) < > 18)
//身份證長度合法性校驗
begin
select @sfz_output = @sfz_input
return
end
select @sfz_doing = case char_length(@sfz_doing)
//轉化為十七位身份證(沒有校驗位)when 15 then
substring(@sfz_doing,1,6)+'19'+substring(@sfz_doing,7,9)
when 18 then substring
   ( @sfz_doing ,1,17) else @sfz_doing end
select @count = 17,@valid = 0
while @count > 0
begin
//非數字字元的合法性校驗
if ascii(substring(@sfz_doing,@count,1))< 48
or ascii(substring(@sfz_doing,@count,1)) >57
begin
select @sfz_output = @sfz_input
return
end
select @valid = @valid + convert(integer,
substring(@sfz_doing,@count,1)) * (case
(19 - @count) when 1 then 1 when 2
then 2 when 3 then 4
when 4 then 8 when 5 then 5 when 6 then 10
when 7 then 9 when 8 then 7
when 9 then 3 when 10 then
6 when 11 then 1 when 12 then 2 when 13
then 4 when 14 then 8 when 15
then 5 when 16 then 10 when
17 then 9 when 18 then 7 end)
select @count = @count - 1
end

select @sfz_output = @sfz_doing + case @valid%11
when 0 then '1' when 1 then '0' when 2 then 'X' when 3 then '9'
when 4 then '8' when 5 then '7'
when 6 then '6' when 7 then '5' when 8 then '4' when 9 then '3'
when 10 then '2' end
//對出生日期的合法性校驗
if convert(integer, substring(@sfz_doing, 13, 2)) >
31 or convert(integer, substring(@sfz_doing, 11, 2)) > 12
begin
select @sfz_output = @sfz_input
return
end
else
begin
if substring(@sfz_doing,11,2) = '02'
begin
if convert(integer,
substring(@sfz_doing,13,2)) > 29
begin
select @sfz_output = @sfz_input
return
end
if convert(integer,substring(@sfz_doing,
13, 2)) = 29 and not ( (convert(integer,
substring(@sfz_doing, 7, 4)) % 4 = 0 And
convert(integer,substring(@sfz_doing,7,4))%100 < > 0)
  Or (convert(integer,substring(@sfz_doing,7,4)) % 400 = 0) )
begin
select @sfz_output = @sfz_input
return
end
end
if convert(integer,substring(@sfz_doing,13,2))
= 31 and substring(@sfz_doing,11,2) not in
('01','03','05','07','08','10','12')
begin
select @sfz_output = @sfz_input
return
end
end
;

PB身份號自適應函式:
PowerBuilder script
輸入引數:as_sfz_i
輸出:空串非法,否則為十八位身份證

f_convert18(as_sfz_i)

string ls_sfz,ls_sign='',ls_calculatesign
int li_valid,li_count,li_charp,li_result

ls_sfz = trim(as_sfz_i)
if len(ls_sfz)< >15 and len(ls_sfz)< >17
and len(ls_sfz)< >18 then
messagebox("提示資訊",
"錄入的身份證長度不正確!!!")
return ""
end if
if len(ls_sfz) = 15 then
ls_sfz=left(ls_sfz,6)+
'19'+right(ls_sfz,9)
end if
if len(ls_sfz) = 18 then
ls_sign = right(ls_sfz,1)
ls_sfz = left(ls_sfz,17)
end if
if not isdate(mid(ls_sfz,7,4)+'-'
+mid(ls_sfz,11,2)+'-'+mid(ls_sfz,13,2)) then
messagebox("提示資訊",
'錄入的身份證出生年月資訊不合法!!!')
end if
li_valid = 0
for li_count = 17 to 1 step -1
if not isnumber(mid(ls_sfz,
li_count,1)) then
messagebox("提示資訊",
"錄入有非數字字元!")
return ""
end if
li_valid=li_valid+mod(2^(li_count),
11)*integer(mid(ls_sfz,18 - li_count,1))
next

li_charp = mod(li_valid,11)
choose case li_charp
case 0
ls_calculatesign = '1'
case 1
ls_calculatesign = '0'
case 2
ls_calculatesign = 'X'
case 3
ls_calculatesign = '9'
case 4
ls_calculatesign = '8'
case 5
ls_calculatesign = '7'
case 6
ls_calculatesign = '6'
case 7
ls_calculatesign = '5'
case 8
ls_calculatesign = '4'
case 9
ls_calculatesign = '3'
case 10
ls_calculatesign = '2'
end choose
if len(ls_sign) = 1 and ls_sign < > ls_calculatesign then
messagebox("提示資訊",'錄入的身份證不符合校驗規則!!!')
end if
return ls_sfz + ls_calculatesign

   以上過程和函式,已經成功的在成都社保局YHCSI2000社保管理系統中成功利用,該系統原有資料110萬,執行環境為PB6.5,Sybase11.5。

相關推薦

中華人民共和國國家標準 GB 11643-1999 身份證升位

根據〖中華人民共和國國家標準 GB 11643-1999〗中有關公民身份號碼的規定,公民身份號碼是特徵組合碼,由十七位數字本體碼和一位數字校驗碼組成。排列順序從左至右依次為:六位數字地址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。校驗碼根據組合碼的前十七位數

php 驗證身份證有效性,根據國家標準GB 11643-1999 15位和18位通用

//驗證身份證是否有效 function validateIDCard($IDCard) { if (strlen($IDCard) == 18) { return check18IDCard($IDCard); } elseif ((strl

中華人民共和國主席令(第七十六號)p4

自己 寫上 vax mtd dtw avr 目前 pyo hud 中華人民共和國主席令(第七十六號)   王滬寧、栗戰書、楊潔篪等參加上述活動。   公告日期:2017年09月01日   截至目前,北京天壇醫院已經擁有70多臺自助機。患者表示,有時候要上班,時間緊,現在幾分

國務院關於廢止〈中華人民共和國營業稅暫行條例〉

繼續 國民經濟 adding 全面 法律 tar key 增長 keyword 2017年9月27日,國務院總理李克強主持召開座談會,研究進一步深化營改增試點、完善相關財稅政策等工作。中新社 劉震 攝 10月30日國務院常務會議通過的一項決定,標誌著實施60多年的營業稅正

9、中華人民共和國行政處罰法

一、行政處罰的種類 1、警告 2、罰款 3、沒收違法所得 4、沒收非法財物 5、責令停產停業 6、暫扣或吊銷許可證 7、暫扣或吊銷執照 8、行政拘留 9、法律、行政法規規定的其他行政處罰 二、行政處罰的原則 1、處罰法定原則 2、處罰公正、公開原則 3、處罰與教育相結合原則 4、權

第三版資訊系統專案管理師-中華人民共和國合同法

中華人民共和國合同法       目    錄       總    則       第一章    一般規定       第二章    合同的訂立       第三章    合同的效力       第四章    合同的履行       第五章    合同的變更和轉讓     

OSChina 週六亂彈 —— 因違反《中華人民共和國治安管理處罰法》第四十四條之規定

Osc亂彈歌單(2019)請戳(這裡) 【今日歌曲】 @xiaoshiyue :#今日歌曲推薦# 驚豔分享谷微的單曲《安守本份

中華人民抗日戰爭暨世界反法西斯戰爭的勝利70周年大閱兵

視頻 ont 記錄 中華 下載 pan images 下載地址 北京 2015-9-3-10:00在北京天安門,紀念抗戰70周年大閱兵。 視頻記錄歷史的瞬間,銘記歷史,放眼未來。。。 下載地址: magnet:?

MOD 10,11演算法(GB/T 17710-1999 資料處理 校驗碼系統 )的Java實現

public static int GB17710_1011(String str) { char[] strTmp = str.toCharArray(); int[] aArray, pArray, sArray;

Linux以GB顯示內存大小

pla art mod shared lai wap data- free 大小 Linux以GB顯示內存大小 [email protected]/* */:~$ free -g total used f

邁拓維矩帶您走進《人民的名義》,了解檢察院指揮中心專業視聽系統的應用

矩陣切換器 近期熱劇《人名的名義》自播出以來,針砭時弊,引起了觀眾共鳴,收視率和網絡評 分都相當之高。該劇是被大眾公認的近幾年最大尺度的社會劇,在“小鮮肉”橫行的當下, 這部劇皆是老戲骨出演,可謂業界良心,一股清流啊。整部劇非常註重各種信息處理技術

人民日報:有基層官員1年開280個會

還需要 部署 超過 行業 部門 增加 1年 轉變 可能 基層幹部大把的精力花在會議和上報材料上,難以抽出更多的精力推動精準扶貧。要反對形式主義,把基層幹部從文山會海中解放出來 精準扶貧駐村蹲點一個月,與鄉鎮和村幹部同吃同住同工作,深度體驗了他們的工作生活狀態,由衷地覺得基層

《從0到1》讀書筆記第2章&quot;像1999 年那樣狂歡&quot;第1記:小結及詞匯解析

content 高新 1.8 匯率 穩定 盈利模式 fun csdn 外匯 小結 本章的目的應該是通過90年代末的互聯網泡沫的背景,成因。影響,以及教訓來教誡人們,在全部人都瘋狂的拋身於洪流熱潮之中時,我們要冷靜的思考辨識出那些不切實際的大眾觀點,

中華神草新零售野山參的功效

什麽 運營 機構 微信 明顯 全國 心血管 網上 經驗 野山參——憑什麽被稱作“神草”?野山參在2000多年前的《神農本草經》中就有記載,“主補五臟,安精神,定魂魄,止驚悸,除邪氣,明目,開心益智,久服輕身延年”,更在《本草綱目》中被李時珍稱為“神草”,而在現代生活中,野山

BZOJ NOI 1999 釘子和小球 動態規劃+分數類

getc namespace += tchar std 有趣的 題目 小數 content 題目大意:不太好描寫敘述,自己看吧。。 思路:首先從最上面的點開始考慮。由於球一定是從最上面開始往下掉,所以球經過最上面的點的概率是1,然後他會有1/2的幾率向左,

張書樂:人民日報發聲力挺京東 快遞服務讓市場評判

京東 天天快遞7月26日的《人民日報》上頗為罕見的在評論、政治2個版面上,用2篇時評+1篇新聞的組合(分別是《加速補齊快遞業的治理短板(人民時評)》、《服務質量多聽市場意見》和《快遞立法,破解成長的煩惱》),對快遞業亂象進行評論和報道,而這或許是可能成為一場有關快遞服務質量的引爆點,而隨後可能帶來更大範圍的快

KVM切換器經過廣大人民的勞動,已經可以多功能使用

KVM切換器 KVM主機切換器專門用於對計算機顯示器信號進行切換和分配,可將多路信號從輸入通道切換輸送到輸出通道中的任一通道上,並且輸出通道間彼此獨立。 簡單的說,就是可以將進來的多路輸入信號中的任意一個顯示到任意一個你指定的顯示器 “KVM”本身是一個數學概念,它

賀一夫補選為永州市第五屆人民代表大會代表o0

ddp pvc nap llc gym olt cs6 waf ner 賀一夫補選為永州市第五屆人民代表大會代表http://r393j9.zfohn.cn/http://op57mc.zfohn.cn/http://h6329v.zfohn.cn/http://e3n9m

金磚國家領導人第九次會晤舉行在即——“廈門準備好了!”gb

zol mcr qt3 .cn nbu cfa ril p2s dtd 金磚國家領導人第九次會晤舉行在即——“廈門準備好了!”   6月5日,方某與何某某(女,32歲,監利縣尺八鎮人,系方某之妻)的娘家人向嶽陽縣公安局城北中心派出所報案稱,何某某於5月26日離家出走,至今未

Python-- 編碼轉換

mage 韓文 國家 跳板 def odin bsp unicode color 【字符編碼與轉碼】 為什麽要進行編碼和轉碼 由於每個國家電腦的字符編碼格式不統一(列中國:GBK),同一款軟件放到不同國家的電腦上會出現亂碼的情況,出現這種情況如何解決呢?! 當然由於所有國家