SQL Server 实现随机生成和校验包含指定字符的随机字符串
SQL Server 实现随机生成包含指定字符的随机字符串
简单代码如下:
```sql
/*
随机生成指定长度的随机字符串
随机包含大写字母、小写字母、数字、特殊字符中至少一种
SQL Server
*/
--declare @a nvarchar(50)='';
--exec dbo.[proc_gen_randomstr] 9,@a output
--select @a
CREATE proc [dbo].[proc_gen_randomstr](@strlen int,@str nvarchar(50) output)
as
begin
set @strlen = case when @strlen > 50 then 50 else @strlen end;
declare @i int=1
declare @flag int=1
declare @randomstr nvarchar(50)=''
declare @specialchars nvarchar(50) = '~!@#$%^&*()_+{}:"?></.,;''\][=-`'
declare @specialpos int = ceiling(rand()*31)
while( @i <= @strlen )
begin
set @flag=ceiling(rand()*4)
if @flag=1
begin
set @randomstr=@randomstr+char(65+ceiling(rand()*25))
end
else if @flag=2
begin
set @randomstr=@randomstr+char(97+ceiling(rand()*25))
end
else if @flag=3
begin
set @randomstr=@randomstr+SUBSTRING(@specialchars,@specialpos,1)
end
else
begin
set @randomstr=@randomstr+cast(floor(rand()*(10)) as nvarchar(1))
end
set @i=@i+1
end
set @str = @randomstr;
end
GO
/*
随机生成十位随机字符串
必须包含大写字母、小写字母、数字、特殊字符
SQL Server
*/
CREATE PROC [dbo].[proc_get_roundstr] @roundstr nvarchar(50) output
as
begin
set @roundstr=CHAR(ROUND(RAND() * 25 + 65,0))+CHAR(ROUND(RAND() * 25 + 97,0))+CHAR(ROUND(RAND() * 9 + 48,0))+CHAR(ROUND(RAND() * 25 + 65,0))
+CHAR(ROUND(RAND() * 13 + 33,0))+CHAR(ROUND(RAND() * 25 + 97,0))+CHAR(ROUND(RAND() * 9 + 48,0))+CHAR(ROUND(RAND() * 25 + 65,0))
+CHAR(ROUND(RAND() * 25 + 97,0))+CHAR(ROUND(RAND() * 9 + 48,0))
end
GO
SQL Server 字符串生成规则校验
校验规则如下:
```sql
if(ASCII(substring(@password,@i,1)) between 48 and 57)
begin
print N'包含数字'
end
if (ASCII(substring(@password,@i,1)) between 65 and 90)
begin
print N'包含大写字母'
end
if (ASCII(substring(@password,@i,1)) between 97 and 122)
begin
print N'包含小写字母'
end
if (ASCII(substring(@password,@i,1))<=47 or ASCII(substring(@password,@i,1)) between 58 and 64 or ASCII(substring(@password,@i,1)) between 91 and 96 or ASCII(substring(@password,@i,1))>=123 )
begin
print N'包含特殊字符'
end