• TSQL--验证身份证是否有效


    /****** Object:  UserDefinedFunction [dbo].[udf_IsvalidIDCard]    Script Date: 02/27/2014 16:03:20 ******/
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE FUNCTION [dbo].[udf_IsvalidIDCard]
    (
    @IDCardNo VARCHAR(50)=''
    )
    RETURNS BIT
    AS
    /*******************************************************************
    函数名称:udf_IsvalidIDCard()
    参数:@IDCardNo string 身份证号码
    返回值:  bit 是否有效
    功能描述:判断身份证号码是否合法
    
    备注:目前中国的身份证号码有18位和15位.
    1,18位身份证号码的组成:6位地区编码+8位出生年月日+3位编号(奇男偶女)+1位校验码
    2,15位身份证号码的组成:6位地区编码+6位出生年月日+3位编号(奇男偶女)
    *******************************************************************/
    BEGIN
    
    DECLARE @Length INT, 
    @Loop INT, 
    @Sum INT
    DECLARE @SingleChar CHAR
    
    SET @Sum = 0
    IF @IDCardNo IS NULL OR @IDCardNo = NULL OR LTRIM(RTRIM(@IDCardNo)) = ''
    BEGIN
    RETURN 0
    END
    
    SET @Length = LEN(@IDCardNo)
    --判断位数
    IF @Length < > 18 AND @Length < > 15
    BEGIN
    RETURN 0    
    END
    IF @Length = 18
    BEGIN
    IF ISNUMERIC(LEFT(@IDCardNo, 17)) = 0
    BEGIN    
    RETURN 0
    END
    IF ISDATE(SUBSTRING(@IDCardNo, 7, 4) + '-' + SUBSTRING(@IDCardNo, 11, 2) + '-' + SUBSTRING(@IDCardNo, 13, 2)) = 0 
    BEGIN
    RETURN 0
    END
    SET @Loop = 17
    WHILE (@Loop  >= 1)
    BEGIN
    SET @Sum = @Sum + CONVERT(INT,SUBSTRING(@IDCardNo, @Loop, 1)) * (POWER(2,(18 - @Loop)) % 11)
    SET @Loop = @Loop - 1
    END
    SET @Loop = @Sum % 11
    IF @Loop = 0
           BEGIN
    SET @SingleChar = '1'
    END
          ELSE IF @Loop = 1
    BEGIN
    SET @SingleChar = '0'
    END
          ELSE IF @Loop = 2
    BEGIN
    SET @SingleChar = 'X'
    END
          ELSE
    BEGIN
    SET @SingleChar = CONVERT(VARCHAR(2),(12 - @Loop))
    END
    IF LOWER(RIGHT(@IDCardNo, 1)) < > LOWER(@SingleChar)
    BEGIN
    RETURN 0
    END
    END
    ELSE IF @Length = 15
    BEGIN
    IF ISNUMERIC(@IDCardNo) = 0
    BEGIN
    RETURN 0
    END    
    IF ISDATE('19' + SUBSTRING(@IDCardNo, 7, 2) + '-' + SUBSTRING(@IDCardNo, 9, 2) + '-' + SUBSTRING(@IDCardNo, 11, 2)) = 0 
    BEGIN
    RETURN 0
    END
    END
    
    RETURN 1
    
    END
    GO

    网上摘抄来代码,无法追寻出处,见谅。

  • 相关阅读:
    最好的 6 个 HTML5 的多媒体播放器
    原型开发、模型构建和设计反馈在线工具
    让Xcode 4.2生成的app支持旧版iOS设备(armv6)
    TOUCHXML解析xml
    50 个最佳 CSS3 教程大放送
    十八般武艺!移动应用开发者必备的18款利器
    ios开源程序集
    iOS如何隐藏各种bar
    读书笔记之:C语言教程(C程序设计第三版)——清华大学
    JM8.6中帧内帧间模式的选择
  • 原文地址:https://www.cnblogs.com/TeyGao/p/3572820.html
Copyright © 2020-2023  润新知