SQLServer2005 身份证函数,含验证和15位转18位

本文作者水如烟分享了SQLServer2005中用于身份证验证和15位身份证号码转换为18位的函数。通过提供的SQL语句,可以检查并修正不符合规范的身份证号码。
摘要由CSDN通过智能技术生成

Author:水如烟

SQLServer2005 身份证函数,含验证和15位转18位

USE   [ LzmTWWorks ]
GO
/* ***** 对象:  UserDefinedFunction [Helper].[IDCard]    脚本日期: 12/07/2007 23:21:37 ***** */
SET  ANSI_NULLS  ON
GO
SET  QUOTED_IDENTIFIER  ON
GO
CREATE   FUNCTION   [ Helper ] . [ IDCard ]  
(
    
@Card      varchar ( 18 )
)
RETURNS  
@TCard   TABLE  
(
     Input    
varchar ( 18 )
    ,IDCard    
varchar ( 18 )
    ,Valid    
bit
)
AS
BEGIN
    
DECLARE     
             
@Input          as   varchar ( 18 )
            ,
@IDCard      as   varchar ( 18 )
            ,
@Valid          as   bit

    
DECLARE      
             
@Length      as   smallint
            ,
@TmpCard      as   varchar ( 18 )
            ,
@IsOld          as   bit

    
SET   @Valid   =   0
    
SET   @IDCard   =   ''
    
SET   @Input   =   ''

    
IF   @Card   IS   NULL   GOTO  Finish

    
SET   @Input   =   LTRIM ( RTRIM ( @Card ))  /* 去空格 */
    
SET   @Length   =   LEN ( @Input )

    
IF   NOT   @Length   IN  ( 15 18 GOTO  Finish  /* 非15、18位 */

    
IF   @Length   =   15
        
BEGIN
            
IF   ISNUMERIC ( @Input =   0   GOTO  Finish  /* 非数字 */
            
SET   @TmpCard   =   LEFT ( @Input 6 +   ' 19 '   +   RIGHT ( @input 9 /* 补充为17位 */
            
SET   @IsOld   =   1
        
END
    
ELSE
        
BEGIN
            
IF   ISNUMERIC ( LEFT ( @Input 17 ))  =   0   GOTO  Finish  /* 非数字 */
            
SET   @TmpCard   =   LEFT ( @Input 17 /* 取前17位 */
            
SET   @IsOld   =   0
        
END

    
DECLARE   @Birthday      varchar ( 8 )
    
SET   @Birthday   =   SUBSTRING ( @TmpCard 7 8 )
    
IF   ISDATE ( @birthday =   0   GOTO  Finish  /* 非日期 */

    
-- 前17位数与相应加权因子的积的和
     DECLARE  
             
@Sum   as   smallint
            ,
@WI   as   tinyint
            ,
@Index   as   tinyint
            ,
@Num   as   tinyint

    
SET   @Sum   =   0
    
SET   @Index   =   1
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值