旧的身份证号吗(15位)如何转换为新的(18位)

/*
根据〖中华人民共和国国家标准   GB   11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。
排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
15位身份证号码未位是双数是女性,单数是男性。
分配顺序码中“999、998、997、996”四个顺序号分别为男女性百岁以上老人专用的特定编号。

最后一位的計算公式∑(ai×Wi)(mod   11)
*/
引用:http://zhidao.baidu.com/question/10975747.html

use tempdb
go
if object_id('F_Iden15To18') is not null
	drop function F_Iden15To18
go
create function F_Iden15To18(@Iden char(15))
returns char(18)
as
begin
if len(@Iden)<>15	
	return @Iden
	declare @CID varchar(18),@i int,@sum int
	select @CID=left(@Iden,6) + '1'+case when right(@Iden,3) in('999','998','997','996') then '8' else '9' end + right
(@Iden,9),@i=1,@sum=0
	while @i<=17
		select @sum=substring(@CID,18-@i,1)*(power(2,@i)%11)+@sum,@i=@i+1
	return (@CID+case 12-@sum%11 when 10 then 'X' else rtrim(12-@sum%11) end)
end
go
select dbo.F_Iden15To18('340524800101001')
/*
34052419800101001X
*/


原文链接: http://blog.csdn.net/roy_88/article/details/3898876

你可能感兴趣的:(旧的身份证号吗(15位)如何转换为新的(18位))