当前位置:首页 » 编程语言 » sql校验18位身份证号
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql校验18位身份证号

发布时间: 2023-08-28 00:57:43

‘壹’ 如何用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数据库约束身份证只能输入15或者18位

createtable身份证
(身份证号varchar(18)check(len(身份证号)in(15,18)))

用以下几个语句你验证下就可以了

insertinto身份证values('123456789012345')
insertinto身份证values('123456789012345678')
insertinto身份证values('1234567890')

‘叁’ 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 中身份证编码与出生日期验证

根据身份证号验证出生日期:

alter table 你的表--修改表
/*添加约束 要么删掉你之前的生日约束 要么把
约束开始到结束复制到你的约束里再改*/
add constraint CK_生日 check(

--约束开始
convert(datetime,replace(stuff(stuff(right (left(char之类类型的18位的身份证号,14),8),5,0,'-'),8,0,'-'),'0',''))=生日字段
--约束结束

)

最后只要把中文替换掉就可以了

‘伍’ 用SQL函数判断是否有效18位身份证号

判断是不是18位
if (len(@snid)<> 18) or (isnull(@snid,'')='')
goto ext
第七位、第八位不是19 或者 20
if not ((substring(@snid,7,2)='19') or (substring(@snid,7,2)='20'))
goto ext
判断前17位是否都是数字
select @i=1,@id_num='',@sn_sum=0,@sn_Last=''
while @i<18
begin

‘陆’ sql查询 身份证判断男女

上面给的答案是错的,这个语句在身份证15位是可以用的,但是二代身份证是执行不下去的,正确的是:SELECT case when (left(right([买受人身份证号码],2),1) % 2 = 0) then '女' else '男' end AS 性别1 from [表名]
若果是更新已有性别字段,但是需要从身份证中提取男女的,用下面sql语句:
update [表名] set [性别]=(case when (left(right([买受人身份证号码],2),1) % 2 = 0) then '女' else '男' end )
where len([身份证])=18 and left(right([身份证],2),1)<>'X'
注意后面的判别条件<>'X'针对的可能是错误的18位身份证号吗需要剔除,否则执行不下去。

‘柒’ sql中判断身份证号码的出生年月是否正确合法

好办呀 oracle-sql
select substr(身份证号,7,8) from al;

这样取出的就是出生年月日了

‘捌’ sql 根据15位或18位身份证号返回出生日期,如果日期不合法,显示"错误的身份证

15位的身份证是7-12位为日期 900124 就是1990 01 24
18位的身份证是7-14位为日期 19900124
身份证号码 Declare @No varchar(30)
select case when len(@No)=15 then '19'+substring(@No,7,6) when len(@No)=18 then substring(@No,7,8) end