44 lines
1.7 KiB
Transact-SQL
44 lines
1.7 KiB
Transact-SQL
DROP FUNCTION IF EXISTS dev.fnGeneratePassword
|
|
GO
|
|
|
|
CREATE FUNCTION dev.fnGeneratePassword (
|
|
@length int
|
|
) RETURNS nvarchar(50)
|
|
AS BEGIN
|
|
|
|
DECLARE
|
|
@digit nvarchar(10) = '23456789'
|
|
,@upper nvarchar(26) = 'ABCDEFGHJKLMNPQRSTUVWXYZ'
|
|
,@lower nvarchar(26) = 'abcdefghijkmnopqrstuvwxyz'
|
|
,@character nvarchar(120)
|
|
,@i int = 1
|
|
,@return nvarchar(50) = ''
|
|
,@format nvarchar(50)
|
|
,@char char(1)
|
|
|
|
IF @length < 8 BEGIN
|
|
SET @length = 8
|
|
END
|
|
|
|
SET @character = @lower + @digit + @upper
|
|
SET @format = REPLICATE('C', @length)
|
|
|
|
SET @format = STUFF(@format, (SELECT (CAST(FLOOR(RandomNumber * 100) AS int) % 2) + 2 FROM dev.vGetRand), 1, 'U') /* 2. vagy 3. karakter nagybetű lesz*/
|
|
SET @format = STUFF(@format, (SELECT (CAST(FLOOR(RandomNumber * 100) AS int) % 2) + 4 FROM dev.vGetRand), 1, 'D') /* 4. vagy 5. karakter számjegy lesz*/
|
|
SET @format = STUFF(@format, (SELECT (CAST(FLOOR(RandomNumber * 100) AS int) % 2) + 6 FROM dev.vGetRand), 1, 'L') /* 6. vagy 7. karakter kisbetű lesz*/
|
|
|
|
WHILE @i <= @length BEGIN
|
|
SET @char = SUBSTRING (@format, @i, 1)
|
|
SET @return +=
|
|
CASE @char
|
|
WHEN 'D' THEN SUBSTRING (@digit, (SELECT CAST(FLOOR(RandomNumber * (LEN(@digit) - 1) + 1) AS int) FROM dev.vGetRand), 1)
|
|
WHEN 'U' THEN SUBSTRING (@upper, (SELECT CAST(FLOOR(RandomNumber * (LEN(@upper) - 1) + 1) AS int) FROM dev.vGetRand), 1)
|
|
WHEN 'L' THEN SUBSTRING (@lower, (SELECT CAST(FLOOR(RandomNumber * (LEN(@lower) - 1) + 1) AS int) FROM dev.vGetRand), 1)
|
|
WHEN 'C' THEN SUBSTRING (@character, (SELECT CAST(FLOOR(RandomNumber * (LEN(@character) - 1) + 1) AS int) FROM dev.vGetRand), 1)
|
|
END
|
|
SET @i += 1
|
|
END
|
|
RETURN @return
|
|
END
|
|
GO
|
|
|