2012-04-15 6 views
1

가능한 중복 :
PHP: How to generate a random, unique, alphanumeric string?PHP에서 고유 한 디지털 ID를 생성하는 방법은 무엇입니까?

이 공식 생산 충돌을합니까?

substr(md5(uniqid(rand()))),0,6) 

숫자 (예 : 7 자리)만으로 고유 ID를 생성하는 방법은 무엇입니까?

+5

숫자 만 필요하고 충돌을 피하려면 자동 증가 값을 사용하는 것이 유일한 방법입니다. 임의의 임의의 값은 충분한 시간과 충분히 큰 표본을 가진 충돌 가능성이 있습니다. –

+0

귀하의 경우 1000 만 개 이상의 ID를 생성하면 충돌이 100 % 발생합니다. – nico

+2

이 사이트의 다른 유사한 질문도 도움이되지 않았습니까? – DanMan

답변

1

uniqid는 13 문자 문자열을 생성합니다. 충돌 위험없이 7 문자 또는 7 자리로 줄이는 방법은 무엇입니까? 만큼 새로운 표현으로 uniqid의 출력을 전치 동안 충돌을 의미로

, 당신처럼 다음을 수행 할 수 있습니다

  • uniqid는 13 문자열을 반환, 각 문자가 될 수 0-9 또는 a-f , 기본적으로 한 자리가있는 16 진수입니다 (소수점 이하 0-15 자리).

예 :

  • 취할 경우 그 두 가지가 0 ~ 255의 범위에서 하나 개의 문자 또는 숫자로 변환 할 수 있습니다, 그것은 7 개 0 ~ 255 값으로 13 개 0-15 값을 줄이기 위해 정말 쉽게 :

    $unique = uniqid(); # 13 characters 
    $sevenPairs = array_map('hexdec', str_split($unique, 2)); 
    printf("Unique ID: %s\nSeven Pairs (digits): %s\n" 
         , $unique, implode(', ', $sevenPairs)); 
    

    출력 : 접두사 부분을 활용할 경우 (귀하의 질문에 당신이 rand를 사용하는) 것을

    Unique ID: 4f8ace1eb736a 
    Seven Pairs (digits): 79, 138, 206, 30, 183, 54, 10 
    

    테이크 관리의 retur의 길이 uniqid에 의한 네 번째 문자열은 13보다 클 수 있습니다.

  • +0

    각 숫자에 대해 N mod 10을 구하면 0에서 999999 사이의 숫자를 얻지 만이 숫자는 항상 고유합니다 !!! ? – Bertaud

    +0

    무슨 뜻인지 이해가 안됩니다. – hakre

    +0

    7 자리 숫자로 7 쌍을 변환하고 싶습니다. – Bertaud

    0

    가장 쉬운 방법은 0부터 시작하여 각 ID에 대해 1 씩 증가시키는 데이터베이스 또는 텍스트 파일에서 가져 오는 것입니다.

    $id = strint(file_get_contents('counter.txt')); 
    file_put_content('counter.txt',++$id); 
    

    rand()를 사용하면 동일한 수를 얻을 확률이 더 커집니다. 증분 값을 원하지 않으면 rand를 사용하고 해당 숫자가 이미 데이터베이스와 함께 사용되는지 확인하십시오.

    관련 문제