1. /****** Object: UserDefinedFunction [dbo].[udf_IsvalidIDCard] Script Date: 02/27/2014 16:03:20 ******/
  2. SET ANSI_NULLS ON
  3. GO
  4.  
  5. SET QUOTED_IDENTIFIER ON
  6. GO
  7.  
  8. CREATE FUNCTION [dbo].[udf_IsvalidIDCard]
  9. (
  10. @IDCardNo VARCHAR(50)=''
  11. )
  12. RETURNS BIT
  13. AS
  14. /*******************************************************************
  15. 函数名称:udf_IsvalidIDCard()
  16. 参数:@IDCardNo string 身份证号码
  17. 返回值: bit 是否有效
  18. 功能描述:判断身份证号码是否合法
  19.  
  20. 备注:目前中国的身份证号码有18位和15位.
  21. 1,18位身份证号码的组成:6位地区编码+8位出生年月日+3位编号(奇男偶女)+1位校验码
  22. 2,15位身份证号码的组成:6位地区编码+6位出生年月日+3位编号(奇男偶女)
  23. *******************************************************************/
  24. BEGIN
  25.  
  26. DECLARE @Length INT,
  27. @Loop INT,
  28. @Sum INT
  29. DECLARE @SingleChar CHAR
  30.  
  31. SET @Sum = 0
  32. IF @IDCardNo IS NULL OR @IDCardNo = NULL OR LTRIM(RTRIM(@IDCardNo)) = ''
  33. BEGIN
  34. RETURN 0
  35. END
  36.  
  37. SET @Length = LEN(@IDCardNo)
  38. --判断位数
  39. IF @Length < > 18 AND @Length < > 15
  40. BEGIN
  41. RETURN 0
  42. END
  43. IF @Length = 18
  44. BEGIN
  45. IF ISNUMERIC(LEFT(@IDCardNo, 17)) = 0
  46. BEGIN
  47. RETURN 0
  48. END
  49. IF ISDATE(SUBSTRING(@IDCardNo, 7, 4) + '-' + SUBSTRING(@IDCardNo, 11, 2) + '-' + SUBSTRING(@IDCardNo, 13, 2)) = 0
  50. BEGIN
  51. RETURN 0
  52. END
  53. SET @Loop = 17
  54. WHILE (@Loop >= 1)
  55. BEGIN
  56. SET @Sum = @Sum + CONVERT(INT,SUBSTRING(@IDCardNo, @Loop, 1)) * (POWER(2,(18 - @Loop)) % 11)
  57. SET @Loop = @Loop - 1
  58. END
  59. SET @Loop = @Sum % 11
  60. IF @Loop = 0
  61. BEGIN
  62. SET @SingleChar = ''
  63. END
  64. ELSE IF @Loop = 1
  65. BEGIN
  66. SET @SingleChar = ''
  67. END
  68. ELSE IF @Loop = 2
  69. BEGIN
  70. SET @SingleChar = 'X'
  71. END
  72. ELSE
  73. BEGIN
  74. SET @SingleChar = CONVERT(VARCHAR(2),(12 - @Loop))
  75. END
  76. IF LOWER(RIGHT(@IDCardNo, 1)) < > LOWER(@SingleChar)
  77. BEGIN
  78. RETURN 0
  79. END
  80. END
  81. ELSE IF @Length = 15
  82. BEGIN
  83. IF ISNUMERIC(@IDCardNo) = 0
  84. BEGIN
  85. RETURN 0
  86. END
  87. IF ISDATE('' + SUBSTRING(@IDCardNo, 7, 2) + '-' + SUBSTRING(@IDCardNo, 9, 2) + '-' + SUBSTRING(@IDCardNo, 11, 2)) = 0
  88. BEGIN
  89. RETURN 0
  90. END
  91. END
  92.  
  93. RETURN 1
  94.  
  95. END
  96. GO

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

TSQL--验证身份证是否有效的更多相关文章

  1. JAVA代码验证身份证信息

    java验证身份证信息代码 转自:http://www.blogjava.net/xylz/archive/2011/01/05/342330.html import java.util.Calend ...

  2. php验证身份证号码的正确性

    /********************php验证身份证号码是否正确函数*********************/function is_idcard( $id ) {   $id = strto ...

  3. jQuery validation学习(2)验证身份证

    验证邮编 jQuery.validator.addMethod("isZipCode", function(value, element) { -]{}$/; return thi ...

  4. C#验证身份证号码

    一.18位的身份证号码 如:130429####%%%%00781.1~6位为地区代码,其中1.2位数为各省级政府的代码,3.4位数为地.市级政府的代码,5.6位数为县.区级政府代码.如13(河北省) ...

  5. 使用t-sql从身份证号中提取生日

    使用t-sql从身份证号中提取生日,一下是转换16位身份证号的例子,仅供参考. create function getDateFromID( ) ) returns datetime as begin ...

  6. php验证身份证号码正确性

    发布:JB01   来源:脚本学堂     [大 中 小] 分享一例php代码,用于验证身份证号码的正确性,用到了preg_match.preg_replace函数,有需要的朋友可以参考学习下.本文转 ...

  7. Js完美验证15/18身份证,Js验证身份证,支持15/18位

    Js完美验证15/18身份证,Js验证身份证,支持15/18位 >>>>>>>>>>>>>>>>> ...

  8. JavaScript验证身份证号

    <%@ page language="java" contentType="text/html; charset=GB18030" pageEncodin ...

  9. 验证身份证合法性的js

    分别对15和18位的身份证号进行验证,非常严格. function idCardNo(value){ //验证身份证号方法 : : : : : : : : : : : : : : : : : : : ...

  10. php 验证身份证有效性,根据国家标准GB 11643-1999 15位和18位通用

    //验证身份证是否有效 function validateIDCard($IDCard) { if (strlen($IDCard) == 18) { return check18IDCard($ID ...

随机推荐

  1. 接口测试“八重天”---HttpClient

    HTTP协议在互联网无处不在,在前面的章节中记录了‘接口本质即协议’,因此,接口测试首先了解的便是协议,其发送数据包和接收数据包的过程,其次便是如何在测试中去发送去解析,不论是通过代码还是工具也好,抽 ...

  2. 十三.jQuery源码解析之$.type()

    512行:出现了一个class2type. 在jQuery中全局搜索这个变量. 这段代码的意思是将一串字符串通过空格分割成数组,并且使用each遍历数组来初始化class2type. 最终的结果应该是 ...

  3. [Python] String strip() Method

    Description The method strip() returns a copy of the string in which all chars have been stripped fr ...

  4. ggplot map

    ggplot {ggplot2} R Documentation Create a new ggplot Description ggplot() initializes a ggplot objec ...

  5. 517. Super Washing Machines

    ▶ 超级洗碗机.给定一个有 n 元素的整数数组,我们把 “将指定位置上元素的值减 1,同时其左侧或者右侧相邻元素的值加 1” 称为一次操作,每个回合内,可以选定任意 1 至 n 个位置进行独立的操作, ...

  6. 利用Nginx rewrite规则实现域名显性转发

    体验更优排版请移步原文:http://blog.kwin.wang/website/nginx-rewrite-realize-domain-forward.html 自己的blog域名最开始用的vb ...

  7. 0 1 1 2 3 5 8 13 21 34 求第N个, 用js实现

    function fibo(n) { var f = []; for (var c = 0; c < n; ++c) { console.log(f.join("")) f. ...

  8. FoxPro 常用内部函数

    1.数学函数(数值函数) 求绝对值函数ABS 格式:ABS( expN) 求整函数INT 格式:INT( expN) 四舍五入函数ROUND 格式:ROUND( expN,〈保留小数位〉) 功能:按保 ...

  9. BloomFilter

    [BloomFilter] 错误率估计.最优哗哈希函数个数.位数组的大小 尚未细看.以看补上. 参考:http://blog.csdn.net/jiaomeng/article/details/149 ...

  10. Unix高级编程Note1

    [Unix Notes] 1./etc/passwd 2.extern int errno; 3.限制, limit.h 4.文件原子操作:O_EXCL & O_CREAT 5.stat操作 ...