mysql密码存储过程_三种随便密码生成sql存储过程

本文分享了三个MySQL存储过程,用于生成随机密码。每个存储过程使用不同的方法来确保密码的随机性和安全性,包括排除特定字符、基于固定字符集和区分大小写的随机选择。
摘要由CSDN通过智能技术生成

本文章分享了几款关于三种随便密码生成sql存储过程,有需要学习的同学可以参考一下下哈。

随机产生密码,Insus.NET总结了三个,并分别写成了存储过程。

第一个,

代码如下

复制代码

usp_RandomPassword CREATE PROCEDURE [dbo].[usp_RandomPassword]

(

@Length INT = 8

)

AS

BEGIN

DECLARE @RandomPassword NVARCHAR(MAX) = N'',@L INT = 1

WHILE @L <= @Length --循环密码长度

BEGIN

--随机产生每一位字符,ASCII码48至122

DECLARE @RndChar CHAR(1) = CHAR(ROUND(RAND() * (122-48+1) + 48,0))

--随机产生的字符不包括下面字符

IF ASCII(@RndChar) NOT IN(58,59,60,61,62,63,64,91,92,93,94,95,96) -- : , ; , < , = , > , ? ,@ , [ , , ] , ^ , _ , `

BEGIN

SET @RandomPassword = @RandomPassword + @RndChar

SET @L = @L + 1

END

END

SELECT @RandomPassword

END

第二个,

代码如下

复制代码

usp_RandomPassword CREATE PROCEDURE [dbo].[usp_RandomPassword]

(

@Length INT = 8

)

AS

BEGIN

DECLARE @RandomPassword NVARCHAR(MAX) = N'',@L INT = 1

--随机密码将由下面字符串产生,数字0-9,大写字母A-Z,小写字母a-z

DECLARE @BaseString VARCHAR(255) = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'

WHILE @L <= @Length --循环密码长度

BEGIN

--61是变量@BaseString的长度减一

SET @RandomPassword = @RandomPassword + SUBSTRING(@BaseString, CONVERT(INT,ROUND(RAND() * 61 + 1,0)),1)

SET @L = @L + 1

END

SELECT @RandomPassword

END

第三个,

代码如下

复制代码

usp_RandomPassword CREATE PROCEDURE [dbo].[usp_RandomPassword]

(

@Length INT = 8

)

AS

BEGIN

DECLARE @RandomPassword NVARCHAR(MAX) = N''

DECLARE @R TINYINT,@L INT = 1

WHILE @L <= @Length --循环密码长度

BEGIN

SET @R = ROUND(RAND() * 2, 0) --随机产生0,1,2整数

IF @R = 0 --当变量为0时,将随机产生一位数字

SET @RandomPassword = @RandomPassword + CHAR(ROUND(RAND() * 9 + 48,0))

ELSE IF @R = 1 --当变量为1时,将随机产生一位大写字母

SET @RandomPassword = @RandomPassword + CHAR(ROUND(RAND() * 25 + 65,0))

ELSE IF @R = 2 --当变量为2时,将随机产生一位小写字母

SET @RandomPassword = @RandomPassword + CHAR(ROUND(RAND() * 25 + 97,0))

SET @L = @L + 1

END

SELECT @RandomPassword

END

最后一个也可以重构写成:

代码如下

复制代码

usp_RandomPassword CREATE PROCEDURE [dbo].[usp_RandomPassword]

(

@Length INT = 8

)

AS

BEGIN

DECLARE @RandomPassword NVARCHAR(MAX) = N'',@L INT = 1

WHILE @L <= @Length --循环密码长度

BEGIN

DECLARE @R INT = ROUND(RAND() * 2, 0)

SET @RandomPassword = @RandomPassword + CASE @R

WHEN 0 THEN CHAR(ROUND(RAND() * 9 + 48,0))

WHEN 1 THEN CHAR(ROUND(RAND() * 25 + 65,0))

WHEN 2 THEN CHAR(ROUND(RAND() * 25 + 97,0)) END

SET @L = @L + 1

END

SELECT @RandomPassword

END

Also reference:

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值