초보자를 위한 시리얼 만들기 정보
PHP 초보자를 위한 시리얼 만들기
본문
결과물 : B307-47B8-8FC5
이런식으로 생성하는 코드입니다^^;
$code = strtoupper( md5( rand( 1000 , 2000 ).date( "Y-m-d H:i:s" ).$i ) );$sn=$code[rand(0,1)].$code[rand(2,3)].$code[rand(4,5)].$code[rand(6,7)]."-";$sn.=$code[rand(8,9)].$code[rand(10,11)].$code[rand(12,13)].$code[rand(14,15)]."-";$sn.=$code[rand(16,17)].$code[rand(18,19)].$code[rand(20,21)].$code[rand(22,23)];
한라인씩 풀어서 설명드리겠습니다.
$code = strtoupper(md5(rand(1000,2000 ).date("Y-m-d H:i:s")));
strtoupper :- 영문을 무조건 대문자로 바꾸어줍니다[예: strtoupper('aBc') -> 결과: ABC]md5 :- 암호화 형식중 하나이며, PHP뿐만 아니라 다른언어에서도 볼 수 있는 암호화 방식입니다.- 총 32자리 영문대소문자와 숫자로 이루어져있는 코드로 출력됩니다.[예: md5(1111) -> 결과: b59c67bf196a4758191e42f76670ceba]rand :- 지정한 범위안에서 임의의 값을 하나 뿌려줍니다.[예: rand(0,10) -> 결과: 0~10 중에서 한자리]date :- 날짜출력관련 함수입니다. 이 예제에서는 시리얼 고유값을 위해 추가하였습니다.- 고유값을 위해 다른 것을 쓰고 싶으시다면 다른것을 쓰셔도 됩니다.(별도 예제 없음)
rand 함수로1000 에서 2000 사이의 값을 랜덤으로 뽑은후
년월일시분초를 붙여서 md5로 암호화한것입니다.
날짜함수와 임의의 수범위라는 값으로 md5를 암호화하면
중복없는 엄청난경우의 수가 생깁니다. 하지만 이게 다가 아닙니다^^!
$sn=$code[rand(0,1)].$code[rand(2,3)].$code[rand(4,5)].$code[rand(6,7)]."-";$sn.=$code[rand(8,9)].$code[rand(10,11)].$code[rand(12,13)].$code[rand(14,15)]."-";$sn.=$code[rand(16,17)].$code[rand(18,19)].$code[rand(20,21)].$code[rand(22,23)];
실제로 시리얼키가 될 변수인 $sn 입니다.아까 md5로 생성한 32자리의 값을 각각 자리마다 배열로써 활용하여rand함수로 출력하게합니다.아까 예제로 만든 md5(1111)값을 가지고 설명드리자면$code 가 B59C67BF196A4758191E42F76670CEBA 일때$code[0]=B$code[1]=5....$code[30]=B$code[31]=A이런식의 배열로도 사용할 수 있게 됩니다.이것을 rand 함수로 사용하면 시리얼코드가 더 유니크해집니다!!결과값인 $code 에서 지정된 배열의 문자열을 임의로 출력하게 되니까요.저의 경우는 (0,1) (2,3) (4,5) (6,7) 형식으로 4그룹을하나의 시리얼묶음인 4자리로 출력하게 했습니다
요기까지 하시고 아래의 방법으로 결과물을 출력해보시면 시리얼이 완성됩니다.
echo $sn;
아래의 샘플은 현재 저희 회사에서 세미나 시리얼을 생성하고, 누가 사용했는지 까지 남기는 예제입니다.

더 좋은 방법은 많습니다만,
너무 쉽게 하면 시리얼키의 고유한 구조파악에 이해를 돕기힘들고,
너무 어렵게 하면 처음 해보시는 분들도 힘드실까봐 이렇게 짰으니
후배님들께서 구조 파악하시는데 좋은 자료가 되었으면 합니다.
고수님들은 건너뛰셔도 됩니다^^!!
길고 지루한 글인데 읽어주셔서 너무 감사합니다!!
ps. 간단하게 MD5 생성값을 확인하고 싶으시면^^?
추천
1
1
댓글 32개

흐억 이해불가 ㅠㅠ 쿠폰번호 저도 받아오는건데 ㅠㅠ 저런식으로 하면되나여?ㅠㅠ

추가설명이랑 예시 붙여서 다시 수정하였습니다. ^^!
생성에 관한 팁입니다.

숫자로 만 구성된 시리얼키를 구현하고 싶습니다.
이게 왜 필요하냐고 물으신다면?
유선전화 상담시 ARS로 알려드리기 위함입니다.
이게 왜 필요하냐고 물으신다면?
유선전화 상담시 ARS로 알려드리기 위함입니다.

저희회사도 그런이야기 했어요.
'세미나 오는 사람들이 저거 어떻게 눌러!!!'
라고 해서 나중엔 숫자구성 시리얼로 변경하였습니다 ㅎㅎㅎㅎ
'세미나 오는 사람들이 저거 어떻게 눌러!!!'
라고 해서 나중엔 숫자구성 시리얼로 변경하였습니다 ㅎㅎㅎㅎ

그래도 중복 검사하는 루틴이 조금 추가해주는게 좋을 것 같은데 ㅜㅜ

아 그렇네요.
샘플화면은 시리얼생성기로 해당 세미나별 필요갯수를 임의생성해서,
DB에 넣은후,
시리얼 치는 사람들의 시리얼키와 DB를 비교하여 맞으면 등록일자와 성함 ip등 부가정보를 담아서 관리화면에서 보는 방식입니다. ㅎㅎ
중복검사루틴까지 하려면 3탄으로 잡고 2개의 강좌형식으로 해야할 것 같습니다 ㅠㅠ
샘플화면은 시리얼생성기로 해당 세미나별 필요갯수를 임의생성해서,
DB에 넣은후,
시리얼 치는 사람들의 시리얼키와 DB를 비교하여 맞으면 등록일자와 성함 ip등 부가정보를 담아서 관리화면에서 보는 방식입니다. ㅎㅎ
중복검사루틴까지 하려면 3탄으로 잡고 2개의 강좌형식으로 해야할 것 같습니다 ㅠㅠ


우하하 !!! 개발자들의 생각은 다 비슷하군요 ㅠㅠ
근데 역시 시리얼생성하는 것은 알고리즘만 다르지
레이아웃은 역시 곱슬최씨님이 짠 것이 최종본 같아요 ㅋㅋㅋㅋㅋㅋ
ps.이게 그 소문의 초대권용인가요!ㅋㅋㅋ
근데 역시 시리얼생성하는 것은 알고리즘만 다르지
레이아웃은 역시 곱슬최씨님이 짠 것이 최종본 같아요 ㅋㅋㅋㅋㅋㅋ
ps.이게 그 소문의 초대권용인가요!ㅋㅋㅋ

이건 그냥 포인트 적립용 쿠폰 프로그램이고..
초대장은 따로 있어요.. ㅎㅎ
초대장은 따로 있어요.. ㅎㅎ

멋집니다!!
좋은거 얻어갑니다.~(--) (__)
좋은거 얻어갑니다.~(--) (__)

숫자로된 시리얼 만들기
<?
//지정된 자릿수의 랜덤한 숫자를 반환합니다. 최대 10까지 가능합니다. 4 이면 1000 에서 9999 사이의 랜덤 숫자
function get_rand_number($len=4) {
if (empty($len) || !is_int($len)) $len = 4;
else if ($len < 0) $len = abs($len);
if ($len > 10) $len = 10;
return rand(bcpow(10, $len - 1), bcadd(bcpow(10, $len), -1));
}
//지정된 자릿수의 숫자로된 시리얼을 반환합니다. - 를 포함하고 싶지 않을때는 $cut 이 $len 보다 크거나 같으면 됩니다.
function get_serial($len=16, $cut=4, $hipen='-'){
if (empty($len) || !is_int($len)) $len = 16;
else if ($len < 0) $len = abs($len);
if (empty($cut) || !is_int($cut)) $cut = 4;
else if ($cut < 0) $cut = abs($cut);
list($usec, $sec) = explode(' ', microtime());
$serial = (string)bcmul((int)str_replace('.', '', (string)((float)$usec + (float)$sec)) , get_rand_number(4));
$serial_length = strlen($serial);
$sub = $len - $serial_length;
if ($sub > 0) $serial .= (string)get_rand_number($sub);
else if ($sub < 0) $serial = substr($serial, 0, 16);
return preg_replace("`([0-9]{" . $cut . "})`", "$1" . $hipen, $serial, floor($len / $cut) - 1);
}
echo get_serial(16, 4, '-');
?>
<?
//지정된 자릿수의 랜덤한 숫자를 반환합니다. 최대 10까지 가능합니다. 4 이면 1000 에서 9999 사이의 랜덤 숫자
function get_rand_number($len=4) {
if (empty($len) || !is_int($len)) $len = 4;
else if ($len < 0) $len = abs($len);
if ($len > 10) $len = 10;
return rand(bcpow(10, $len - 1), bcadd(bcpow(10, $len), -1));
}
//지정된 자릿수의 숫자로된 시리얼을 반환합니다. - 를 포함하고 싶지 않을때는 $cut 이 $len 보다 크거나 같으면 됩니다.
function get_serial($len=16, $cut=4, $hipen='-'){
if (empty($len) || !is_int($len)) $len = 16;
else if ($len < 0) $len = abs($len);
if (empty($cut) || !is_int($cut)) $cut = 4;
else if ($cut < 0) $cut = abs($cut);
list($usec, $sec) = explode(' ', microtime());
$serial = (string)bcmul((int)str_replace('.', '', (string)((float)$usec + (float)$sec)) , get_rand_number(4));
$serial_length = strlen($serial);
$sub = $len - $serial_length;
if ($sub > 0) $serial .= (string)get_rand_number($sub);
else if ($sub < 0) $serial = substr($serial, 0, 16);
return preg_replace("`([0-9]{" . $cut . "})`", "$1" . $hipen, $serial, floor($len / $cut) - 1);
}
echo get_serial(16, 4, '-');
?>

자릿수가 12 밑으로 내려갓을 경우 중복이 나올 확률은 있습니다.

감사합니다.

네 고맙습니다.

역시 썸네일 이전부터 제 사부로 모시고싶던 유창화님!!!
좋은 팁입니다 !! 감사합니다^^!
좋은 팁입니다 !! 감사합니다^^!

너무 과찬을 하시네요. 고맙습니다.

자게 댓글에 남기신 내용 궁금해서 여기에 댓글로 남깁니다.
"생성시에 중복이 나올 수 없단 의미입니다"
이부분을 잘 이해를 못해서요..^^;
혹시 같은 시점에서 함수를 호출했을때 중복이 나오지 않는 다는 뜻인지요?
하지만, 대부분의 경우 rand 함수가 시드값을 중복사용하지 않도록 만들어져 있으므로 동시에 호출해도 rand 함수만으로도 다른 값이 나오지 않나요?
"생성시에 중복이 나올 수 없단 의미입니다"
이부분을 잘 이해를 못해서요..^^;
혹시 같은 시점에서 함수를 호출했을때 중복이 나오지 않는 다는 뜻인지요?
하지만, 대부분의 경우 rand 함수가 시드값을 중복사용하지 않도록 만들어져 있으므로 동시에 호출해도 rand 함수만으로도 다른 값이 나오지 않나요?

오타가 하나 잇네요
else if ($sub < 0) $serial = substr($serial, 0, 16);
대신
else if ($sub < 0) $serial = substr($serial, 0, $len);
입니다.
else if ($sub < 0) $serial = substr($serial, 0, 16);
대신
else if ($sub < 0) $serial = substr($serial, 0, $len);
입니다.

우워~! 나중에 계속 진행될 api를 저런식으로 해야겠네요 ㅎㅎ

그렇죠, 관리의 효율^^!

원글 (시리얼키 생성)에 대한 의견은 아니고요.. ^^;
랜덤하고 유일한 문자.숫자열 생성에 대한 일반적인 생각인데요..
유일성 부분은, 어짜피 중복체크를 해야 하는 것이므로,
랜덤한 부분을 어떻게 만족하는냐인데..
결국 rand 함수와 md5 등의 해시 기능, 그리고 시간을 이용한 seed 값의 조합으로
예측할 수 없고, (중복이 아닌 시간에 따라서) 반복되지 않는 문자.숫자열을 만드는 것일테니..
만일 rand 함수 자체가 그런 특징을 다 만족한다면,
해시기능만 사용해서 원하는 방향으로 해시해서 사용하면 될것 같아서 생각해봤습니다.
일단 php의 rand()는 그렇게 랜덤하지는 않네요.. ^^;
http://boallen.com/random-numbers.html
php의 다른 함수인 mt_rand()가 낫다고는 하네요.. 4배 빠르고요.. ^^;
http://oi43.tinypic.com/vwtppl.jpg (왼쪽이 rand, 오른쪽이 mt_rand)
다른 문제로, 유창화님이 구현하신 동시호출해도 다른 문자.숫자열을 나오게 하도록 하는 부분은..
이전 php에서 microtime을 srand() 로 넘겨서 매번 다른 시드값을 사용하도록 했다면,
4.2 이후에는 rand()나 mt_rand() 둘다 자동으로 랜덤 시드값을 사용한다고 하네요.
http://php.net/manual/en/function.srand.php
랜덤한 시드값을 rand와 mt_rand에서 구체적으로 어떻게 만들어 사용하는지는 잘 모르겠지만,
자동으로 처리된다고 하는것 보면, microtime 시간값을 쓰거나, (동시에 호출할 경우 중복을 피하기 위해서) 미리 만들어놓은 수많은 시드값을 순차적으로 사용하는 방법을 것 같습니다.
어떻든, 제 생각에는, rand()나 mt_rand()가 이미 원하는 정도의 난수성을 충분히 감당하고 있는듯 해서 남겼습니다. 아, 물론 원하는 형태로 해시하거나 중복체크하는 것은 당연히 해야 할 부분이겠고요..
랜덤하고 유일한 문자.숫자열 생성에 대한 일반적인 생각인데요..
유일성 부분은, 어짜피 중복체크를 해야 하는 것이므로,
랜덤한 부분을 어떻게 만족하는냐인데..
결국 rand 함수와 md5 등의 해시 기능, 그리고 시간을 이용한 seed 값의 조합으로
예측할 수 없고, (중복이 아닌 시간에 따라서) 반복되지 않는 문자.숫자열을 만드는 것일테니..
만일 rand 함수 자체가 그런 특징을 다 만족한다면,
해시기능만 사용해서 원하는 방향으로 해시해서 사용하면 될것 같아서 생각해봤습니다.
일단 php의 rand()는 그렇게 랜덤하지는 않네요.. ^^;
http://boallen.com/random-numbers.html
php의 다른 함수인 mt_rand()가 낫다고는 하네요.. 4배 빠르고요.. ^^;
http://oi43.tinypic.com/vwtppl.jpg (왼쪽이 rand, 오른쪽이 mt_rand)
다른 문제로, 유창화님이 구현하신 동시호출해도 다른 문자.숫자열을 나오게 하도록 하는 부분은..
이전 php에서 microtime을 srand() 로 넘겨서 매번 다른 시드값을 사용하도록 했다면,
4.2 이후에는 rand()나 mt_rand() 둘다 자동으로 랜덤 시드값을 사용한다고 하네요.
http://php.net/manual/en/function.srand.php
랜덤한 시드값을 rand와 mt_rand에서 구체적으로 어떻게 만들어 사용하는지는 잘 모르겠지만,
자동으로 처리된다고 하는것 보면, microtime 시간값을 쓰거나, (동시에 호출할 경우 중복을 피하기 위해서) 미리 만들어놓은 수많은 시드값을 순차적으로 사용하는 방법을 것 같습니다.
어떻든, 제 생각에는, rand()나 mt_rand()가 이미 원하는 정도의 난수성을 충분히 감당하고 있는듯 해서 남겼습니다. 아, 물론 원하는 형태로 해시하거나 중복체크하는 것은 당연히 해야 할 부분이겠고요..

좀더 디깅을 해봤습니다.
우선, 자동으로 처리되는 시드값은,
#define GENERATE_SEED() (((long) (time(0) * getpid())) ^ ((long) (1000000.0 * php_combined_lcg(TSRMLS_C))))
로 처리된다고 하네요. http://programmers.stackexchange.com/questions/76229/predicting-the-output-of-phps-rand
내용을 보니, 초단위-_- 시간값과, 개별 pid, 그리고 잘모르는 php_combined_lcg..
php_combined_lcg를 따로 검색해봤더니
http://phpxref.com/xref/gallery/session.php.source.html#l44
gettimeofday 함수 (microsec 단위까지 리턴) 를 사용하네요.
코드를 봐서는, rand() 함수 자체가 이미 micosec 단위의 시간정보와, 개별 pid 등을 섞어서 시드값을 만들어 사용하고 있는 것 같네요.
음.. 어떻게 받아들이실지 잘 모르겠습니다.. ^^;
그냥 그런 정보도 있다 하고 너그럽게.. ^^;
우선, 자동으로 처리되는 시드값은,
#define GENERATE_SEED() (((long) (time(0) * getpid())) ^ ((long) (1000000.0 * php_combined_lcg(TSRMLS_C))))
로 처리된다고 하네요. http://programmers.stackexchange.com/questions/76229/predicting-the-output-of-phps-rand
내용을 보니, 초단위-_- 시간값과, 개별 pid, 그리고 잘모르는 php_combined_lcg..
php_combined_lcg를 따로 검색해봤더니
http://phpxref.com/xref/gallery/session.php.source.html#l44
gettimeofday 함수 (microsec 단위까지 리턴) 를 사용하네요.
코드를 봐서는, rand() 함수 자체가 이미 micosec 단위의 시간정보와, 개별 pid 등을 섞어서 시드값을 만들어 사용하고 있는 것 같네요.
음.. 어떻게 받아들이실지 잘 모르겠습니다.. ^^;
그냥 그런 정보도 있다 하고 너그럽게.. ^^;

네에 밥먹고 왔습니다.
많은 댓글을 달아주셧네요. 고맙습니다.
제글의 요지는
정확하게 말하면
마이크로타임이 일치하고 랜드값이 일치할시 똑같은 시리얼 번호가 생성될수 있습니다.
하지만
마이크로타임이 일치하면서 랜드값이 일치 할수 없으므로 동일한 시리얼 번호가 생성될수 없습니다.
라는 뜻이었습니다.
많은 댓글을 달아주셧네요. 고맙습니다.
제글의 요지는
정확하게 말하면
마이크로타임이 일치하고 랜드값이 일치할시 똑같은 시리얼 번호가 생성될수 있습니다.
하지만
마이크로타임이 일치하면서 랜드값이 일치 할수 없으므로 동일한 시리얼 번호가 생성될수 없습니다.
라는 뜻이었습니다.

네, 저도 그렇게 이해하고 댓글을 남겼었습니다.^^;
그렇다면 (마이크로타임을 시드의 일부로 사용하는) 랜드값만 사용해도 되지 않을까요?
라는 것이 제 생각이었습니다. ^^
그렇다고, 랜드값에 더 많은 난수성을 추가하는 것에 대한 반론은 아니고요..
그냥 랜드값에 이미 프로그램으로 할 수 있는 난수성은 대부분 반영되어 있다는 의미로 남겼습니다. ^^
그렇다면 (마이크로타임을 시드의 일부로 사용하는) 랜드값만 사용해도 되지 않을까요?
라는 것이 제 생각이었습니다. ^^
그렇다고, 랜드값에 더 많은 난수성을 추가하는 것에 대한 반론은 아니고요..
그냥 랜드값에 이미 프로그램으로 할 수 있는 난수성은 대부분 반영되어 있다는 의미로 남겼습니다. ^^

rand 값은 중복이 나올수 있습니다.
랜드함수를 사용한 페이지를 계속 해서 새로고침을 해보면
중복된 값이 나올수 있음을 알수 있습니다.
자릿수가 크면 확률은 줄겟지만 중복은 나올수가 있습니다.
그래서 매번 항상 변하는 마이크로타임을 곱하는 이유입니다.
그리고 랜드함수는 그거외에도 12자리 이상인가 부터는
제대로 동작하지 않습니다.
좋은 의견 감사합니다.
랜드함수를 사용한 페이지를 계속 해서 새로고침을 해보면
중복된 값이 나올수 있음을 알수 있습니다.
자릿수가 크면 확률은 줄겟지만 중복은 나올수가 있습니다.
그래서 매번 항상 변하는 마이크로타임을 곱하는 이유입니다.
그리고 랜드함수는 그거외에도 12자리 이상인가 부터는
제대로 동작하지 않습니다.
좋은 의견 감사합니다.

중복여부라면, 어짜피 어떤 함수도 정해진 digit 안에서는 중복을 만들 수 밖에 없는 것 같네요.
랜드함수의 결과값의 범위가 부족하다면,
랜드값하나에, 규칙적으로 증가하는 마이크로타임을 곱하는 것보다는,
랜드함수 결과값 여러개를 연결하는게 더 낫지 않을까요?
사실 별로 중요하지도 않은 부분인데, 워낙 전공이 그래서 그냥 호기심이 작동했나 봅니다. ^^
혹시 제가 기분을 상하게 만들지는 않았나 걱정되네요..
좋은 하루되세요. ^^
랜드함수의 결과값의 범위가 부족하다면,
랜드값하나에, 규칙적으로 증가하는 마이크로타임을 곱하는 것보다는,
랜드함수 결과값 여러개를 연결하는게 더 낫지 않을까요?
사실 별로 중요하지도 않은 부분인데, 워낙 전공이 그래서 그냥 호기심이 작동했나 봅니다. ^^
혹시 제가 기분을 상하게 만들지는 않았나 걱정되네요..
좋은 하루되세요. ^^

아래에 더 댓글을 달수 없네요
괜찮습니다. 좋은 의견 감사합니다.
괜찮습니다. 좋은 의견 감사합니다.

제가 착각한 부분이 하나 있었습니다.
int 의 범위를 생각 못했습니다.
//지정된 자릿수의 랜덤한 숫자를 반환합니다. 최대 10까지 가능합니다. 4 이면 1000 에서 9999 사이의 랜덤 숫자
function get_rand_number($len=4) {
if (empty($len) || !is_int($len)) $len = 4;
else if ($len < 0) $len = abs($len);
if ($len > 10) $len = 10;
return rand(bcpow(10, $len - 1), bcadd(bcpow(10, $len), -1));
}
//지정된 자릿수의 숫자로된 시리얼을 반환합니다. - 를 포함하고 싶지 않을때는 $cut 이 $len 보다 크거나 같으면 됩니다.
function get_serial($len=16, $cut=4, $hipen='-'){
if (empty($len) || !is_int($len)) $len = 16;
else if ($len < 0) $len = abs($len);
if (empty($cut) || !is_int($cut)) $cut = 4;
else if ($cut < 0) $cut = abs($cut);
list($usec, $sec) = explode(' ', microtime());
$serial = str_replace('.', '', (string)bcmul(bcmul((float)$usec * 10000000 , (float)$sec) , get_rand_number(4)));
$serial_length = strlen($serial);
$sub = $len - $serial_length;
if ($sub > 0) $serial .= (string)get_rand_number($sub);
else if ($sub < 0) $serial = substr($serial, 0, $len);
return preg_replace("`([0-9]{" . $cut . "})`", "$1" . $hipen, $serial, floor($len / $cut) - 1);
}
백만건 생성 테스트 해보았으며 중복은 발생하지 않습니다.
int 의 범위를 생각 못했습니다.
//지정된 자릿수의 랜덤한 숫자를 반환합니다. 최대 10까지 가능합니다. 4 이면 1000 에서 9999 사이의 랜덤 숫자
function get_rand_number($len=4) {
if (empty($len) || !is_int($len)) $len = 4;
else if ($len < 0) $len = abs($len);
if ($len > 10) $len = 10;
return rand(bcpow(10, $len - 1), bcadd(bcpow(10, $len), -1));
}
//지정된 자릿수의 숫자로된 시리얼을 반환합니다. - 를 포함하고 싶지 않을때는 $cut 이 $len 보다 크거나 같으면 됩니다.
function get_serial($len=16, $cut=4, $hipen='-'){
if (empty($len) || !is_int($len)) $len = 16;
else if ($len < 0) $len = abs($len);
if (empty($cut) || !is_int($cut)) $cut = 4;
else if ($cut < 0) $cut = abs($cut);
list($usec, $sec) = explode(' ', microtime());
$serial = str_replace('.', '', (string)bcmul(bcmul((float)$usec * 10000000 , (float)$sec) , get_rand_number(4)));
$serial_length = strlen($serial);
$sub = $len - $serial_length;
if ($sub > 0) $serial .= (string)get_rand_number($sub);
else if ($sub < 0) $serial = substr($serial, 0, $len);
return preg_replace("`([0-9]{" . $cut . "})`", "$1" . $hipen, $serial, floor($len / $cut) - 1);
}
백만건 생성 테스트 해보았으며 중복은 발생하지 않습니다.

제가 제안한 방법하고 비교해보고 싶어서 다음과 같이 실험해 봤습니다.
희한하게도 다음 문장은, 아무리 많이 돌려도, 8192개의 유니크 문자열을 만드네요.. -_-;
제 노트북 wamp의 php 라이브러리의 문제가 있는지, 뭔가 루핑이 있는듯 합니다.
rand(1000,9999)."-".rand(1000,9999)."-".rand(1000,9999)."-".rand(1000,9999);
그래서 mt_rand 함수를 썼더니 잘 되네요.
mt_rand(1000,9999)."-".mt_rand(1000,9999)."-".mt_rand(1000,9999)."-".mt_rand(1000,9999);
제 노트북에서 중복검사 (백만번씩 10번) 해봤는데, 중복이 나오지는 않네요.
오늘, php의 rand함수가 문제가 많다는 것을 배운 좋은 경험을 했습니다. ^^
희한하게도 다음 문장은, 아무리 많이 돌려도, 8192개의 유니크 문자열을 만드네요.. -_-;
제 노트북 wamp의 php 라이브러리의 문제가 있는지, 뭔가 루핑이 있는듯 합니다.
rand(1000,9999)."-".rand(1000,9999)."-".rand(1000,9999)."-".rand(1000,9999);
그래서 mt_rand 함수를 썼더니 잘 되네요.
mt_rand(1000,9999)."-".mt_rand(1000,9999)."-".mt_rand(1000,9999)."-".mt_rand(1000,9999);
제 노트북에서 중복검사 (백만번씩 10번) 해봤는데, 중복이 나오지는 않네요.
오늘, php의 rand함수가 문제가 많다는 것을 배운 좋은 경험을 했습니다. ^^

열심히 하시네요
보기 좋습니다.
보기 좋습니다.

와,, 정말 부러운분들입니다.
이런 의견들의 나눔이 많아지길 바랍니다.
이런 의견들의 나눔이 많아지길 바랍니다.