SQL函数验证身份证号码是否有效
2011-10-15 16:12
447 查看
-- =============================================
-- 作 者: 黄江华
-- 日 期: 2008-05-27
-- 描 述: 身份证号码是否有效
-- 备 注:
-- 身份证号只有15或18位
-- 如果是15位身份证 则只验证日期和是否数字格式
-- 18位身份证 验证日期 校验位
-- =============================================
IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'dbo.fun_IsValidID')
AND type in ('IF', 'FN', 'TF'))
DROP FUNCTION dbo.fun_IsValidID
GO
CREATE FUNCTION dbo.fun_IsValidID(@ID Varchar(18))
-- Add the parameters for the stored procedure here
RETURNS BIT
AS
BEGIN
DECLARE @ValidFactors VARCHAR(17),
@ValidCodes VARCHAR(11),
@I TINYINT,
@iTemp INT
--位数不满足则为非法ID
IF Len(@ID) <> 15 AND Len(@ID) <> 18
RETURN(0);
--如果是15位身份证 则只验证日期和是否数字格式
IF LEN(@ID)=15
IF ISDATE('19'+SUBSTRING(@ID,7,6))=0 OR ISNUMERIC(@ID)=0
RETURN(0);
ELSE
RETURN(1);
/*18位身份证 验证日期 校验位 */
--验证日期和前17位是否数字格式
IF ISDATE(SUBSTRING(@ID,7,8))=0 OR ISNUMERIC(SUBSTRING(@ID,1,17))=0
RETURN(0);
--验证校验位开始
SELECT @ValidFactors='79A584216379A5842',
@ValidCodes='10X98765432',
@I=1,@iTemp=0
WHILE @i<18
BEGIN
SELECT
@iTemp=@iTemp+CAST(SUBSTRING(@ID,@i,1) AS INT)*(CASE SUBSTRING(@validFactors,@i,1) WHEN 'A' THEN 10 ELSE SUBSTRING(@ValidFactors,@i,1) END)
,@i=@i+1
END
IF SUBSTRING(@ValidCodes,@iTemp%11+1,1)=RIGHT(@ID,1)
RETURN(1);
ELSE
RETURN(0);
RETURN NULL;
END
-- 作 者: 黄江华
-- 日 期: 2008-05-27
-- 描 述: 身份证号码是否有效
-- 备 注:
-- 身份证号只有15或18位
-- 如果是15位身份证 则只验证日期和是否数字格式
-- 18位身份证 验证日期 校验位
-- =============================================
IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'dbo.fun_IsValidID')
AND type in ('IF', 'FN', 'TF'))
DROP FUNCTION dbo.fun_IsValidID
GO
CREATE FUNCTION dbo.fun_IsValidID(@ID Varchar(18))
-- Add the parameters for the stored procedure here
RETURNS BIT
AS
BEGIN
DECLARE @ValidFactors VARCHAR(17),
@ValidCodes VARCHAR(11),
@I TINYINT,
@iTemp INT
--位数不满足则为非法ID
IF Len(@ID) <> 15 AND Len(@ID) <> 18
RETURN(0);
--如果是15位身份证 则只验证日期和是否数字格式
IF LEN(@ID)=15
IF ISDATE('19'+SUBSTRING(@ID,7,6))=0 OR ISNUMERIC(@ID)=0
RETURN(0);
ELSE
RETURN(1);
/*18位身份证 验证日期 校验位 */
--验证日期和前17位是否数字格式
IF ISDATE(SUBSTRING(@ID,7,8))=0 OR ISNUMERIC(SUBSTRING(@ID,1,17))=0
RETURN(0);
--验证校验位开始
SELECT @ValidFactors='79A584216379A5842',
@ValidCodes='10X98765432',
@I=1,@iTemp=0
WHILE @i<18
BEGIN
SELECT
@iTemp=@iTemp+CAST(SUBSTRING(@ID,@i,1) AS INT)*(CASE SUBSTRING(@validFactors,@i,1) WHEN 'A' THEN 10 ELSE SUBSTRING(@ValidFactors,@i,1) END)
,@i=@i+1
END
IF SUBSTRING(@ValidCodes,@iTemp%11+1,1)=RIGHT(@ID,1)
RETURN(1);
ELSE
RETURN(0);
RETURN NULL;
END
相关文章推荐
- java验证身份证号码是否有效源代码
- java验证身份证号码是否有效源代码
- java验证身份证号码是否有效源代码
- java代码实现身份证第18位的计算和验证身份证号码是否是真实有效.
- java验证身份证号码是否有效源代码 wn25的头像 wn25 23 2015-01-04 20:09 6 基本信息 Java × 1 浏览
- java验证身份证号码是否有效源代码
- java验证身份证号码是否有效源代码
- JS正则表达式验证是否为11位有效手机号码,
- 是否以某字符串结尾 是否以某字符串开始 是否是整数 裁减字符串空格 是否是浮点数 是否所有字符为数字类型 是否为空 是否是EMAIL 是否是电话号码 身份证号码验证-支持新的带x身份证 日期验证
- 验证身份证号码是否正确
- 验证身份证号码是否合法
- Java验证身份证号码是否合法
- Java 验证 身份证号码是否规范
- 最近项目有一个验证身份证号是否有效的需求,封装了一个工具类。
- Java 验证身份证号码是否正确
- Java 验证 身份证号码是否规范
- 验证身份证是否真实有效
- 使用Excel的函数批量判断身份证号码是否有效
- TSQL--验证身份证是否有效
- 身份证号码是否有效