身份證15位與18位相互轉換

2021-05-24 01:57:23 字數 4675 閱讀 7064

--將字元轉化為整數

--drop function char_to_int

create function char_to_int(@in_char varchar(1))

returns int

asbegin

if isnumeric(@in_char)=1  --是

begin

declare @out_int int

select @out_int=convert(int,@in_char)

endelse begin  --否

select @out_int=-1

endreturn @out_int

end--15位身份證轉化為18位

--drop function sfzh_to_18

create function sfzh_to_18(@befor varchar(2),  --字首18,19,20

@sfzh varchar(30)   --15位身份證

)returns varchar(30)

asbegin

declare @new_sfzh char(30)

declare @old_sfzh varchar(30)

select @sfzh=ltrim(rtrim(@sfzh))

select @old_sfzh=substring(@sfzh,1,6)+@befor+substring(@sfzh,7,9)

--print @old_sfzh

if len(@sfzh)=15  --長度15位

begin

declare  @check char(1),

@char1 char(1),

@char2 char(1),

@char3 char(1),

@char4 char(1),

@char5 char(1),

@char6 char(1),

@char7 char(1),

@char8 char(1),

@char9 char(1),

@char10 char(1),

@char11 char(1),

@char12 char(1),

@char13 char(1),

@char14 char(1),

@char15 char(1),

@char16 char(1),

@char17 char(1),

@int1 int,

@int2 int,

@int3 int,

@int4 int,

@int5 int,

@int6 int,

@int7 int,

@int8 int,

@int9 int,

@int10 int,

@int11 int,

@int12 int,

@int13 int,

@int14 int,

@int15 int,

@int16 int,

@int17 int,

@ma    int

select @char1=substring(@old_sfzh,17,1)

select @char2=substring(@old_sfzh,16,1)

select @char3=substring(@old_sfzh,15,1)

select @char4=substring(@old_sfzh,14,1)

select @char5=substring(@old_sfzh,13,1)

select @char6=substring(@old_sfzh,12,1)

select @char7=substring(@old_sfzh,11,1)

select @char8=substring(@old_sfzh,10,1)

select @char9=substring(@old_sfzh,9,1)

select @char10=substring(@old_sfzh,8,1)

select @char11=substring(@old_sfzh,7,1)

select @char12=substring(@old_sfzh,6,1)

select @char13=substring(@old_sfzh,5,1)

select @char14=substring(@old_sfzh,4,1)

select @char15=substring(@old_sfzh,3,1)

select @char16=substring(@old_sfzh,2,1)

select @char17=substring(@old_sfzh,1,1)

select @int1=dbo.char_to_int(@char1)

select @int2=dbo.char_to_int(@char2)

select @int3=dbo.char_to_int(@char3)

select @int4=dbo.char_to_int(@char4)

select @int5=dbo.char_to_int(@char5)

select @int6=dbo.char_to_int(@char6)

select @int7=dbo.char_to_int(@char7)

select @int8=dbo.char_to_int(@char8)

select @int9=dbo.char_to_int(@char9)

select @int10=dbo.char_to_int(@char10)

select @int11=dbo.char_to_int(@char11)

select @int12=dbo.char_to_int(@char12)

select @int13=dbo.char_to_int(@char13)

select @int14=dbo.char_to_int(@char14)

select @int15=dbo.char_to_int(@char15)

select @int16=dbo.char_to_int(@char16)

select @int17=dbo.char_to_int(@char17)

select @ma=@int1*(power(2,1)  %11)

+@int2*(power(2,2)   %11)

+@int3*(power(2,3)   %11)

+@int4*(power(2,4)   %11)

+@int5*(power(2,5)   %11)

+@int6*(power(2,6)   %11)

+@int7*(power(2,7)   %11)

+@int8*(power(2,8)   %11)

+@int9*(power(2,9)   %11)

+@int10*(power(2,10) %11)

+@int11*(power(2,11) %11)

+@int12*(power(2,12) %11)

+@int13*(power(2,13) %11)

+@int14*(power(2,14) %11)

+@int15*(power(2,15) %11)

+@int16*(power(2,16) %11)

+@int17*(power(2,17) %11)

select @ma=12-(@ma %11)

select @check=convert(char(1),@ma)

if @ma=12

begin

select @check='1'

endelse if @ma=11

begin

select @check='0'

endelse if @ma=10

begin

select @check='x' 

endselect @new_sfzh=@old_sfzh+@check

endelse  begin  --長度不是15位

select @new_sfzh=@sfzh

endreturn @new_sfzh

end--18位身份證轉化為15位--drop function sfzh_to_15

create function sfzh_to_15(@sfzh varchar(30)   --18位身份證

)returns varchar(30)

asbegin

declare @new_sfzh char(30)

declare @old_sfzh varchar(30)

select @sfzh=ltrim(rtrim(@sfzh))

if len(@sfzh)=18  --長度18位

begin

select @new_sfzh=substring(@sfzh,1,6)+substring(@sfzh,9,9)

endelse  begin  --長度不是18位

select @new_sfzh=@sfzh

endreturn @new_sfzh

end--測試

print dbo.sfzh_to_18('19','310109670404403')

print dbo.sfzh_to_15('31010919670404403x')

身份證15位公升18位

六位數字位址碼 八位數字出生日期碼 三位數字順序碼 順序碼的奇數分給男性,偶數分給女性 一位數字校驗碼 校驗碼是根據前面十七位數字碼,按照iso 7064 1983.mod 11 2校驗碼計算出來的檢驗碼 1 多了年數 第6位開始多了19表示完整的出生日期 2 多了最後一位校驗碼 ai wi mod...

15位身份證 18位轉換

region 元件設計器生成的 web 服務設計器所必需的 private icontainer components null 設計器支援所需的方法 不要使用 編輯器修改 此方法的內容。private void initializecomponent 清理所有正在使用的資源。protected o...

15位身份證補全為18位身份證演算法

一 15位身份證和18位身份證號碼結構介紹 要進行身份證號碼的驗證,首先需要了解我國身份證號碼的編碼規則。我國身份證號碼多由若干位數字或者數字與字母混合組成。早期身份證由15位數字構成,這主要是在1980年以前發放的身份證,後來考慮到千年蟲問題,因為15位的身份證號碼只能為1900年1月1日到199...