1. 首页 > 科技

SQL语句编写一个函数,18位身份证转换为15位? 18位身份证号提取年龄

SQL语句编写一个函数,18位身份证转换为15位?18位身份证号提取年龄

18位身份证如何转成15位 SQL语句

/*

最后一位较验码,公式如下:

   ∑(a[i]*W[i]) mod 11 ( i = 2, 3, ..., 18 ) (1)

   "*" 表示乘号

   i--------表示身份证号码每一位的序号,从右至左,最左侧为18,最右侧为1。

   a[i]-----表示身份证号码第 i 位上的号码

   W[i]-----表示第 i 位上的权值 W[i] = 2^(i-1) mod 11

   计算公式 (1) 令结果为 R

根据下表找出 R 对应的校验码即为要求身份证号码的校验码C。

   R 0 1 2 3 4 5 6 7 8 9 10

   C 1 0 X 9 8 7 6 5 4 3 2

*/

string tmpCode = (sfzCode.Length == 15 ? sfzCode.Substring(0, 6) + "19" + sfzCode.Substring(6) : sfzCode);

string[] aryCheck = new string[] { "1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2" };

int[] aryWeight = new int[] { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };

int sum = 0;

for (int i = 0; i < 17; i++)

sum += aryWeight[i] * Convert.ToInt32(tmpCode.Substring(i, 1));

rst.CheckVal = aryCheck[sum % 11];

如果一定要用SQL

那么将这段代码用SQL的自定义函数实现下

然后再语句中使用就可以了

在SQL SERVER 中将18位身份证转换到15位身份证的函数,大家给一下,谢谢!

CREATE FUNCTION [dbo].[IDCard18To15] (@id_card varchar(24))

RETURNS varchar(18) AS

BEGIN

declare @x2 varchar(18)

if len(@id_card)=18 --18位

begin

select @x2=stuff(@id_card,18,1,'')

select @x2=stuff(@x2,7,2,'')

end

else if len(@id_card)=15 --15位

select @x2=@id_card

return @x2

END

写一个sqlserver中的身份证15位转18位的函数怎么写

Create Function [dbo].[fn_SJ](@ID Varchar(15))

Returns Varchar(18)

As

Begin

If Len(@ID)!=15

Return Null

Declare @SFZ Varchar(18)

Set @SFZ=Left(@ID,6)+'19'+Right(@ID,9)

Declare @Q Varchar(17),@YZM Varchar(1)

Set @Q='1,0,X,9,8,7,6,5,4,3,2,'

Declare @X Varchar(40)

Set @X='7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,'

Declare @S int,@I int

Set @S=0

Set @I=1

While @I<18

Begin

Set @S=@S+Convert(int,SUBSTRING(@SFZ,@I,1))*Left(@X,CharIndex(',',@X)-1)

Set @X=Substring(@X,CharIndex(',',@X)+1,40)

Set @I=@I+1

End

Set @S=@S%11

Set @YZM=Substring(@Q,CharIndex(',' ,@Q ,@S*2)+1 ,1)

Return @SFZ+@YZM

End

如何用函数把18位身份证号码变成15位身份证号码?

假设证号写在A列,则B1单元格写入公式

=IF(A1="","",LEFT(A1,6)&MID(A1,9,9))

下拉填充公式