개발/MSSQL

[MSSQL] "0000-0000-0000-0000" 형식의 랜덤 코드 생성하기

까망군 2013. 5. 24. 10:08

일을 하다 보니 정말 여러가지 상황을 다 겪게 된다.

 

미션 :

"0000-0000-0000-0000" 형식으로 된 랜덤 코드를 생성하라!

 

이걸 C# 코드로 만들려다가 어차피 이 코드를 dB에 저장도 해야 해서 SQL로 만듬

 

가장 일반적인 생각으로 랜덤함수 써서 16자리 만들면 되지! (어딘가에서 검색해서 나옴)

 

"0000-0000-0000-0000" 형식의 랜덤코드 생성
 
-- 랜덤 코드 생성 하기
DECLARE @i				INT 		= 0
DECLARE @randomCode 	VARCHAR(21) = ''
DECLARE @randomCodeTmp 	VARCHAR(1) 	= ''
DECLARE @couponCodeLen 	INT			= 19	-- 랜덤 코드 자리수

-- 상품권 번호 랜덤 생성
WHILE @i < @couponCodeLen
BEGIN
	IF NOT EXISTS(SELECT 1 WHERE @i IN (4, 9, 14))	-- '-' 들어가는 위치
	BEGIN
		IF CONVERT(INT, RAND() * 2) = 0				-- 숫자 or 문자
		BEGIN
			SET @randomCodeTmp = CHAR((CONVERT(INT, RAND() * 1000) % 26 ) + 65)	
			-- 'I', 'O' 은 숫자 1,0과 혼동이 생길 수 있으니 다른 문자로 대체
			IF @randomCodeTmp = 'I' OR @randomCodeTmp = 'O' SET @i = @i - 1
			ELSE SET @randomCode = @randomCode + @randomCodeTmp
		END
		ELSE
		BEGIN
			SET @randomCodeTmp = CONVERT(VARCHAR(2),(CONVERT(INT, RAND() * 10)))
			-- 숫자 0,1은 영문자 'I', 'O'와 헷갈릴수 있으니 교체
			IF @randomCodeTmp = '0' OR @randomCodeTmp = '1' SET @i = @i - 1
			ELSE SET @randomCode = @randomCode + @randomCodeTmp
		END 				
	END
	ELSE
	BEGIN
		SET @randomCode = @randomCode + '-'
	END
	SET @i = @i + 1			
END

SELECT @randomCode as 'RANDOM_CODE' 

 

아! NEWID() 라는걸 배웠다.

위 코드를 아래 형태로 교체하였다.

 

 

"0000-0000-0000-0000" 형식의 랜덤코드 생성 2
 
-- 랜덤 코드 생성하기 2
declare @randomCodeTmp VARCHAR(32)
declare @randomCode VARCHAR(19)

-- 랜덤 ID 생성
SET @randomCodeTmp = REPLACE(newid(), '-', '')
-- 'I', 'O' 혼동 문자 교체
SET @randomCodeTmp = REPLACE(REPLACE(@randomCodeTmp, 'I', 'H'), 'O', 'N')
-- 1, 0 혼동 숫자 교체
SET @randomCodeTmp = REPLACE(REPLACE(@randomCodeTmp, '1', '2'), '0', '9')
-- 랜덤 형식 맞춰서 ID 생성
SET @randomCode = SUBSTRING(@randomCodeTmp, 1, 4)+'-'+SUBSTRING(@randomCodeTmp, 5, 4)+'-'+SUBSTRING(@randomCodeTmp, 9, 4)+'-'+SUBSTRING(@randomCodeTmp, 13, 4)
SELECT @randomCode as 'RANDOM_CODE'
 

이것보다 더 좋은 코드가 나올 수도 있음...ㅋㅋ