kreta/Kreta.DataAccess.Migrations/DBScripts/Database/dev/fnGeneratePassword.sql
2024-03-13 00:33:46 +01:00

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