PB身份證號碼正確性校驗

身份證號碼校驗(gf_check_identity)

可以同時對15位和18位的身份證進行校驗,並自動根據平年和潤年進行判斷。可以在數據窗口ItemChanged事件中調用該函數進行校驗。
/*-------------------------------------------------------------------------------
* 函數名稱:Boolean gf_check_identity(string as_identity)
* 函數功能: 驗證身份證號輸入的正確性
* 參數說明: string      as_identity    身份證號
* 返 回 值: True  成功
*            False 失敗
* 調用舉例: gf_check_identity('410101650101101')  
* 尚未完善:沒有對身份證號碼的第18位校驗位進行判斷。因爲我暫時沒有找到第18位
* 的校驗算法,等找到了我再加上。應該比較簡單。
*--------------------------------------------------------------------------------*/
string ls_identity_no
string ls_year,ls_month,ls_day,ls_date
string ls_today
long ll_year
long ll_identity_no_len  

ls_identity_no = as_identity
ls_today = string(today(),'yyyy/mm/dd')

ll_identity_no_len=LEN(ls_identity_no)

if ls_identity_no = ''  then
MessageBox("系統提示","身份證號碼不能爲空!!",StopSign!,ok!)
return False
elseif ll_identity_no_len <> 15 AND ll_identity_no_len <> 18 then
MessageBox("系統提示","身份證號碼位數不足,請檢查輸入情況!!",StopSign!,ok!)
return False
end if

if ll_identity_no_len = 15 then //身份證爲 15 處理,  認爲15位的年 = 19**
ls_year = mid(ls_identity_no, 7, 2)
ls_month = mid(ls_identity_no, 9, 2)
ls_day = mid(ls_identity_no, 11, 2)
ls_year = '19' + ls_year//year is only 20 century
ls_date = ls_year +'/' + ls_month +'/' + ls_day
else
ls_year = mid(ls_identity_no, 7, 4)
if Left(ls_year,2) <> '19' and left(ls_year,2) <> '20' then
MessageBox("系統提示","身份證號碼中的出生年份不正確, 請您重新輸入! ",StopSign!,ok!)
return False
end if
ls_month = mid(ls_identity_no, 11, 2)
ls_day = mid(ls_identity_no, 13, 2)
ls_date = ls_year +'/' + ls_month +'/' + ls_day
end if

if ls_month > '12' then
MessageBox("系統提示","身份證號碼中的出生月份大於12, 請您重新輸入 ",StopSign!,ok!)
return False
elseif ls_month < '1' then
MessageBox("系統提示","身份證號碼中的出生月份小於01, 請您重新輸入 ",StopSign!,ok!)
return False
end if

if ls_day < '01' then
MessageBox("系統提示","身份證號碼的出生日小於01, 請您重新輸入 !",StopSign!,ok!)
return False
end if

CHOOSE CASE ls_month
CASE '01','03','05','07','08','10','12'//大月的處理
if ls_day > '31' then
MessageBox("系統提示","身份證號碼的出生日大於31, 請您重新輸入 !",StopSign!,ok!)
return False
end if

CASE '04','06','05','09','11' //小月的處理
if ls_day > '30' then
MessageBox("系統提示","身份證號碼的出生日大於30, 請您重新輸入 !",StopSign!,ok!)
return False
end if
CASE '02'  //平年和閏年的處理
ll_year = long(ls_year)
if (mod(ll_year,4) = 0 and Mod(ll_year,100)<>0) or (Mod(ll_year,400) = 0) then   //閏年,二月份不能多於29天
if ls_day > '29' then
MessageBox("系統提示","閏年的二月份沒有" + ls_day + "日,請重新輸入出生日期!",StopSign!,ok!)
return False
end if
else//平年二月份不能大於28天
if ls_day > '28' then
MessageBox("系統提示","平年的二月份沒有" + ls_day + "日,請重新輸入出生日期!",StopSign!,ok!)
return False
end if
end if
END CHOOSE

if ls_date > ls_today then
MessageBox("系統提示","身份證號碼的出生日期小於登記日期,不合理請您重新輸入 !",StopSign!,ok!)
return False
end if

return True
發佈了29 篇原創文章 · 獲贊 7 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章