sql server中使用函数验证身份证号码是否合法
2023-09-27 14:26:14 时间
1 SET ANSI_NULLS ON 2 GO 3 SET QUOTED_IDENTIFIER ON 4 GO 5 -- ============================================= 6 -- Author:<Author,,Name > 7 -- Create date: <Create Date, , > 8 -- Description: <Description, , > 9 -- ============================================= 10 ALTER FUNCTION [dbo].[fn_IsValidIDCard] 11 ( 12 @IDCardNo varchar(50)='' 13 ) 14 RETURNS bit 15 AS 16 /******************************************************************* 17 函数名称:fn_IsvalidIDCard() 18 参数:@IDCardNo string 身份证号码 19 返回值: bit 是否有效 20 功能描述:判断身份证号码是否合法 21 22 备注:目前中国的身份证号码有18位和15位. 23 1,18位身份证号码的组成:6位地区编码+8位出生年月日+3位编号(奇男偶女)+1位校验码 24 2,15位身份证号码的组成:6位地区编码+6位出生年月日+3位编号(奇男偶女) 25 *******************************************************************/ 26 BEGIN 27 28 declare @Length int, 29 @Loop int, 30 @Sum int 31 declare @SingleChar char 32 33 set @Sum = 0 34 if @IDCardNo is null or @IDCardNo = null or ltrim(rtrim(@IDCardNo)) = '' 35 begin 36 return 0 37 end 38 39 set @Length = len(@IDCardNo) 40 --判断位数 41 if @Length < > 18 and @Length < > 15 42 begin 43 return 0 44 end 45 46 if @Length = 18 47 begin 48 if isnumeric(left(@IDCardNo, 17)) = 0 49 begin 50 return 0 51 end 52 if isdate(substring(@IDCardNo, 7, 4) + '-' + substring(@IDCardNo, 11, 2) + '-' + substring(@IDCardNo, 13, 2)) = 0 53 begin 54 return 0 55 end 56 set @Loop = 17 57 while (@Loop >= 1) 58 begin 59 set @Sum = @Sum + convert(int,substring(@IDCardNo, @Loop, 1)) * (power(2,(18 - @Loop)) % 11) 60 set @Loop = @Loop - 1 61 end 62 set @Loop = @Sum % 11 63 if @Loop = 0 64 begin 65 set @SingleChar = '1' 66 end 67 else if @Loop = 1 68 begin 69 set @SingleChar = '0' 70 end 71 else if @Loop = 2 72 begin 73 set @SingleChar = 'X' 74 end 75 else 76 begin 77 set @SingleChar = convert(varchar(2),(12 - @Loop)) 78 end 79 if lower(Right(@IDCardNo, 1)) < > lower(@SingleChar) 80 begin 81 return 0 82 end 83 end 84 else if @Length = 15 85 begin 86 if isnumeric(@IDCardNo) = 0 87 begin 88 return 0 89 end 90 if isdate('19' + substring(@IDCardNo, 7, 2) + '-' + substring(@IDCardNo, 9, 2) + '-' + substring(@IDCardNo, 11, 2)) = 0 91 begin 92 return 0 93 end 94 end 95 96 return 1 97 98 END
相关文章
- mysql-server-5.7.6+ 在线开启gtid与在线关闭gtid
- MS SQL Server的STRING_SPLIT和STRING_AGG函数
- 字符串中去除多余的空格保留一个(MS SQL Server)
- SQL Server 内置转换函数介绍
- org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create directory /user/hive/warehouse/page_view. Name node is in safe mode
- 在SQL Server中如何快速查找DBCC命令和语法?
- Connecting to Integration Services Access is Denied in SQL Server 2016 or 2017
- 从SQL Server中的存储过程执行SSIS包
- sql server日期时间函数
- VisualSVN Server的windows 2003配置和使用方法(图文并茂)
- 从SQL Server到MySQL,近百亿数据量迁移实战
- jvm client模式和server模式
- Jenkins ERROR: Server rejected the 1 private key(s)
- SQL Server查询代码在哪个视图、存储过程、函数、触发中使用过
- sql server中datetime默认值设置和日期函数
- 登录名 '***' 拥有一个或多个数据库。在删除该登录名之前,请更改相应数据库的所有者。 (Microsoft SQL Server,错误: 15174)
- sql server性能查询,连接数
- SQL SERVER 2008 R2安全配置与防暴力破解
- SQL Server 按某一字段分组取最大(小)值所在行的数据
- sql server中QUOTENAME()函数的用法
- SQL server 2008定期的备份数据库及删除job
- SQL Server 2012复制教程以及复制的几种模式
- openJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c0000000, 1890582528, 0) failed
- Sublime Text 3使用技巧 | server
- RDS SQL Server 创建数据库关系图(Database Diagrams)
- .Net+SQL Server企业应用性能优化笔记—精确查找瓶颈
- Sql Server系列:排序函数
- Sql Server系列:系统函数
- Sql Server系列:字符串函数
- Sql Server系列:索引基础
- Sql Server系列:Update语句
- Setup SQL Server 2008 Maintenance Plan Email Notifications
- visual_studio_team_foundation_server_2010 下载