테스트 사이트 - 개발 중인 베타 버전입니다

(수정)숫자형태의 시리얼 만들기

· 13년 전 · 802 · 9
아래 댓글에 올린것은 제가 착각한 부분이 있어서 다시 올립니다.
백만건 테스트 거쳣으며 중복 발생하지 않습니다.
 
//지정된 자릿수의 랜덤한 숫자를 반환합니다. 최대 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);
}

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 9개

참고로
get_rand_number(4) 를 곱하는 이유는
제일 앞자리가 랜덤으로 나오게 하기 위함입니다.
아직 할건 아니고 말로만 오가는 건이 하나 있어서 혼자 가끔 고민하고 있었는데 바로 일들어 가도 되겠네요. 감사합니다.
네에 도움이 되셧으면 합니다.
감사합니다. 너무 고생하셨네요 ^^ 추천날리고 갑니다 ㅎㅎ
네에 감사합니다.
13년 전
유창화님 글에 자동으로 추천하는 함수는 없나요?
과찬이십니다.
13년 전
우오 멋집니다!
저는 보통 대충 만들어서 중복검사 해버리고 마는데..
꼼꼼하십니다!!
고맙습니다. 아침부터 힘이 나네요

게시글 목록

번호 제목
24366
4041
16525
16524
16520
16518
16514
16504
16501
16498
30105
16490
16484
4037
16451
16449
30100
16441
26288
24362
16436
4036
16435
30099
16433
16431
16404
4026
16402
16397
4020
4006
30096
16396
16394
16392
3987
16391
16389
16383
3983
16377
16375
16370
16367
16363
30093
3977
16361
30089
16359
3974
16358
16357
16356
16354
16353
16352
16351
16350
16343
16342
16341
16340
16339
16338
16337
16334
3965
16333
3958
16331
16330
16329
3952
24357
16327
16325
16320
30082
16317
16316
3948
16314
16312
16307
16306
16304
16292
16291
16287
16283
16281
16277
16269
16266
16265
16259
16258
30078