⑴ sql 中身份證編碼與出生日期驗證
根據身份證號驗證出生日期:
alter table 你的表--修改表
/*添加約束 要麼刪掉你之前的生日約束 要麼把
約束開始到結束復制到你的約束里再改*/
add constraint CK_生日 check(
--約束開始
convert(datetime,replace(stuff(stuff(right (left(char之類類型的18位的身份證號,14),8),5,0,'-'),8,0,'-'),'0',''))=生日欄位
--約束結束
)
最後只要把中文替換掉就可以了
⑵ 如何用SQL語言寫一個觸發器,實現身份證號碼位數的判斷。
CREATE TRIGGER mod_test ON dbo.tablename
FOR UPDATE
AS
declare @errno int, @errmsg varchar(255)
if (select len(身份證) from inserted) not in (0,18)
begin
select @errno = 50001, @errmsg = '身份證號碼不等於18位,請檢查!! '
goto error
end
return
error:
raiserror @errno @errmsg
rollback transaction
⑶ 如何通過SQL語言檢索身份證號的尾號驗證
不是很理解你的意思、、檢索尾號為1
select*fromtablewhereidcardlike'%1'
⑷ sql中判斷身份證號碼的出生年月是否正確合法
好辦呀 oracle-sql
select substr(身份證號,7,8) from al;
這樣取出的就是出生年月日了
⑸ 求SQL加入身份證號驗證第18位的方法
身份證號碼是每一個公民終身不變的號碼,不要查詢使用他人的身份號碼,請使用自己的身份號碼,否則會負法律責任。
⑹ sql 語句 驗證身份證號碼
幫你搜了一下,參考參考。
主要驗證SQL資料庫中已輸入的15位 及18位 身份證號碼的位數、出生年月日是否正確,
可以過濾出大部分的輸入錯誤。
or (len(身份證號)=18 and (Substring(身份證號,7,2)<'19' or Substring(身份證號,7,2)>'20'
or (Substring(身份證號,11,2)>12)
or (Substring(身份證號,11,2) in (01,03,05,07,08,10,12) and Substring(身份證號,13,2)>31)
or (Substring(身份證號,11,2) in (04,06,09,11) and Substring(身份證號,13,2)>30)
or (Substring(身份證號,11,2)=02 and Substring(身份證號,13,2)>29)))
---------------------- 下面是針對 15位 及18位 身份證號碼性別的驗證語句 ------------------
-- Access 不支持 Substring 查詢,可以替換為 mid 查詢。
select 序號,姓名,身份證號,性別
from 身份表
where (((len(身份證號)=15) and (Substring(身份證號,15,1) in (1,3,5,7,9)) and 性別<>'男')
or ((len(身份證號)=15) and (Substring(身份證號,15,1) in (2,4,6,8,0)) and 性別<>'女'))
or (((len(身份證號)=18) and (Substring(身份證號,17,1) in (1,3,5,7,9)) and 性別<>'男')
or ((len(身份證號)=18) and (Substring(身份證號,17,1) in (2,4,6,8,0)) and 性別<>'女'))
---------------------- 下面是針對 15位 及18位 身份證號碼位數與出生年月日的驗證 ------------------
-- Access 不支持 Substring 查詢,可以替換為 mid 查詢。
select 序號,姓名,身份證號,性別
from 身份表
where (len(身份證號)<>15 and len(身份證號)<>18)
or (len(身份證號)=15 and ((Substring(身份證號,9,2)>12)
or (Substring(身份證號,11,2) > 31)
or (Substring(身份證號,9,2) in (01,03,05,07,08,10,12) and Substring(身份證號,11,2)>31)
or (Substring(身份證號,9,2) in (04,06,09,11) and Substring(身份證號,11,2)>30)
or (Substring(身份證號,9,2)=02 and Substring(身份證號,11,2)>29)))
⑺ SQL函數驗證身份證號碼是否有效
SQL函數驗證身份證號碼是否有效
比如身份證號在C列,D2:
=IF(MID("10X98765432",MOD(SUM(MID(C2,{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17},1)*2^(18-{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17})),11)+1,1)=RIGHT(C2),"身份證正確","身份證錯誤")
數組公式,按CTRL+SHIFT+回車結束,下拉。
⑻ sql sever 2008r2 中如何批量判斷身份證真假
--建議你做成一個自定義函數,然後再調用
--區域編碼的驗證,你得有csounty_sar這個表才行,所以下面的代碼,我去掉了這個
Declare@pspt_idVarchar(18)='52212019880722042X'
Select
case
/*判斷身份證號碼是否為18位*/
whenlen(@pspt_id)<>'18'then'身份證號碼位數不對'
/*判斷身份證號碼前17位是否含除數字外的字元*/
whenISNUMERIC(substring(@pspt_id,1,17))=0then'身份證號碼前17位格式不正確'
/*判斷身份證的年份是否在合理范圍內*/
whensubstring(@pspt_id,7,4)notbetween'1900'and'2014'then'身份證年份錯誤'
/*判斷身份證的月份是否在合理范圍內*/
whensubstring(@pspt_id,11,2)notbetween'01'and'12'then'身份證月份錯誤'
/*判斷身份證日期是否在合理范圍內*/
whenisdate(substring(@pspt_id,7,8))=0then'身份證日期錯誤'
/*判斷身份證號碼的第18位是否符合驗證規則*/
when
(
substring(@pspt_id,1,1)*7+
substring(@pspt_id,2,1)*9+
substring(@pspt_id,3,1)*10+
substring(@pspt_id,4,1)*5+
substring(@pspt_id,5,1)*8+
substring(@pspt_id,6,1)*4+
substring(@pspt_id,7,1)*2+
substring(@pspt_id,8,1)*1+
substring(@pspt_id,9,1)*6+
substring(@pspt_id,10,1)*3+
substring(@pspt_id,11,1)*7+
substring(@pspt_id,12,1)*9+
substring(@pspt_id,13,1)*10+
substring(@pspt_id,14,1)*5+
substring(@pspt_id,15,1)*8+
substring(@pspt_id,16,1)*4+
substring(@pspt_id,17,1)*2
)%11
<>
(
case
whensubstring(@pspt_id,18,1)='1'then'0'
whensubstring(@pspt_id,18,1)='0'then'1'
whensubstring(@pspt_id,18,1)in('X','x')then'2'
whensubstring(@pspt_id,18,1)='9'then'3'
whensubstring(@pspt_id,18,1)='8'then'4'
whensubstring(@pspt_id,18,1)='7'then'5'
whensubstring(@pspt_id,18,1)='6'then'6'
whensubstring(@pspt_id,18,1)='5'then'7'
whensubstring(@pspt_id,18,1)='4'then'8'
whensubstring(@pspt_id,18,1)='3'then'9'
whensubstring(@pspt_id,18,1)='2'then'10'
end
)
then'身份證驗證錯誤'Else'正確'EndAs結果
⑼ sql如何判斷一串數字非身份證號碼
1.身份證號碼生成是有規則的,利用此規則在程序端就可以控制的;
2.若是查證一個身份證號碼是否在資料庫中,直接創建一個唯一索引,念扮然後SELECT查詢即可仔埋灶;
3.身份證是有規則的,可以判斷頭部是否符合庫能查到,以及中間液氏8位數字是否符合年月日的規則,身份證的字元個數。
⑽ 通過sql判別身份證號的性別,並與表中的性別列進行比對,來判斷是否錄入錯誤
1、15位身份證號
15位身份證號編碼格式:6位地區編碼+2位出生年份+2位出生月份+2位出生日期+3位流水號
其中3位流水號的最後一個為單數的則為男性,雙數或零的為女性
2、18位身份證號
18位身份證號編碼格式:6位地區編碼+4位出生年份+2位出生月份+2位出生日期+3位流水號+1位校驗碼
其中3位流水號的最後一個為單數的則為男性,雙數或零的為女性
1位校驗碼的規則是:
將前面的身份證號碼17位數分別乘以不同的系數。第i位對應的數為[2^(18-i)]mod11。從第一位到第十七位的系數分別為:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 ;
2、將這17位數字和系數相乘的結果相加;
3、用加出來和除以11,看余數是多少?;
4、余數只可能有0 1 2 3 4 5 6 7 8 9 10這11個數字。其分別對應的最後一位身份證的號碼為1 0 X 9 8 7 6 5 4 3 2;
通過上面得知如果余數是2,就會在身份證的第18位數字上出現羅馬數字的Ⅹ。如果余數是10,身份證的最後一位號碼就是2;
例如:某男性的身份證號碼是34052419800101001X。我們要看看這個身份證是不是合法的身份證。
首先:我們得出,前17位的乘積和是189
然後:用189除以11得出的結果是17 + 2/11,也就是說余數是2。
最後:通過對應規則就可以知道余數2對應的數字是x。所以,這是一個合格的身份證號碼。
PHP 計算公式:
$card="xxx";//身份證號碼
$map=array(1, 0, X, 9, 8, 7, 6, 5, 4, 3, 2);
$sum = 0;
for($i = 17; $i > 0; $i--){
$s=pow(2, $i) % 11;
$sum += $s * $card[17-$i];
}
echo $map[$sum % 11];//這里顯示最後一位校驗碼