SQL语句编写一个函数,18位身份证转换为15位? 18位身份证号提取年龄
- 18位身份证如何转成15位 SQL语句
- 在SQL SERVER 中将18位身份证转换到15位身份证的函数,大家给一下,谢谢!
- 写一个sqlserver中的身份证15位转18位的函数怎么写
- 如何用函数把18位身份证号码变成15位身份证号码?
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))
下拉填充公式