SQL验证身份证

CREATE FUNCTION [fn_ValidateIDC]
(
@idc varchar(18)
)
RETURNS BIT
AS
BEGIN
IF LEN(@idc)<>15 AND LEN(@idc)<>18--身份证号只有15或18位
RETURN(0)
IF LEN(@idc)=15  --如果是15位身份证 则只验证日期和是否数字格式
   IF ISDATE('19'+SUBSTRING(@idc,7,6))=0 OR ISNUMERIC(@idc)=0
      
RETURN(0)
   
ELSE
      
RETURN(1)
/**//*
        18位身份证 验证日期 校验位
        */
    IF ISDATE(SUBSTRING(@idc,7,8))=0 OR ISNUMERIC(SUBSTRING(@idc,1,17))=0--验证日期和前17位是否数字格式
   RETURN(0)
/**//*验证校验位开始*/
DECLARE @validFactors VARCHAR(17),@validCodes VARCHAR(11),@i TINYINT,@iTemp INT
SELECT @validFactors='79A584216379A5842',@validCodes='10X98765432',@i=1,@iTemp=0
WHILE @i<18
  
BEGIN
     
SELECT @iTemp=@iTemp+CAST(SUBSTRING(@idc,@i,1) AS INT)*(CASE SUBSTRING(@validFactors,@i,1) WHEN 'A' THEN 10 ELSE SUBSTRING(@validFactors,@i,1) END)
             ,
@i=@i+1
  
END
IF SUBSTRING(@validCodes,@iTemp%11+1,1)=RIGHT(@idc,1)
  
RETURN 1
ELSE
  
RETURN 0
RETURN NULL
END

GO

---------------------------------------------------------------------------------------------------------------------------------

这个是根据身份证号码判断是哪个省的,是在CSDN上的SQLcode

create function f_getcityfromcid (@cid varchar(18))  
returns varchar(50)  
as
begin   

   
declare @acity varchar(1000)  
   
set @acity = '____,____,____,____,____,____,____,____,____,____,____,北京__,天津__,河北__,山西__,内蒙古_,____,____,____,____,____,辽宁__,吉林__,黑龙江_,____,____,____,____,____,____,____,上海__,江苏__,浙江__,安微__,福建__,江西__,山东__,____,____,____,河南__,湖北__,湖南__,广东__,广西__,海南__,____,____,____,重庆__,四川__,贵州__,云南__,西藏__,____,____,____,____,____,____,陕西__,甘肃__,青海__,宁夏__,新疆__,____,____,____,____,____,台湾__,____,____,____,____,____,____,____,____,____,香港__,澳门__,____,____,____,____,____,____,____,____,国外__,'


   
set @cid = upper(@cid)  

   
IF (len(@cid) <> 18 OR patindex('%[^0-9X]%',@cid) > 0)  
       
RETURN '你小子骗我,这不是合法的身份证'

   
IF substring(@acity,cast(left(@cid,2) as int)* 5+1,4) = ''   
       
RETURN '你小子骗我,这身份证的地区码不存在'


   
RETURN '这小子是:'+replace(substring(@acity,cast(left(@cid,2) as int)* 5+1,4),'_','')  

end  
go  

select dbo.f_getcityfromcid('32108519760502ttt9')  
/*
--------------------------------------------------  
你小子骗我,这不是合法的身份证

(所影响的行数为 1 行)

*/
select dbo.f_getcityfromcid('32108519****026**9')  
/*
--------------------------------------------------  
这小子是:江苏

(所影响的行数为 1 行)


*/
drop function f_getcityfromcid

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值