IF @result >=10
IF @result=10
RETURN @osfz + 'X'
ELSE
begin
set @result=@result - 11
RETURN @osfz + ltrim(@result)
end
ELSE
RETURN @osfz + ltrim(@result)
end
ELSE --若非旧身份证号码
RETURN @sfz
return @sfz
end
分析二:检查出不合理的身份证号码 检查不合理身份证号码(只判断号码的合理性,不判断真假,真假需经公安机关认证)的规则至少包括:1、不包括非法字符;2、15位或者18位;3、行政区划代码在国家统计局公布范围之内;4、(若为15位则在转化为18位后)左起第17位数字奇偶性与性别对应正确;5、出生年月在合理范围;6、(18位号码)校验位正确;
设身份证号码所在表中有字段姓名、性别、身份证号;行政区划代码表中有字段行政区划代码、行政区名,筛选不合理身份证号码记录所需SQL代码(预先创建不合理身份证号记录表,其建表代码略;需使用上述分析一中创建的函数):
DECLARE cur1 CURSOR FOR
select 身份证号,性别 from 身份证号码所在表
DECLARE @身份证号 varchar(50),@性别 varchar(10),@18位标准身份证号 varchar(50)
Open cur1
Fetch next from cur1 into @身份证号,@性别
While @@FETCH_STATUS=0
Begin
if(isnumeric(substring (@身份证号,1,17))=0
or (len(@身份证号)=18 and substring(@身份证号,18,1) not like '[0-9|X]'))
insert into 不合理身份证号记录表 values(@身份证号,@性别,'包括非法字符')
else(
set @18位标准身份证号=dbo.f_CID15to18(@身份证号)
if(LEN(@18位标准身份证号)<>18)
insert into 不合理身份证号记录表 values(@身份证号,@性别,'位数错误')