--將字元轉化為整數
--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...