2014-10-08 4 views
-2

고유 한 GID를 생성하기 위해 노력하고 있으며 다음 코드에 대한 의견이 필요합니다. 아이디어는 1 초의 시간 프레임 내에서 특정 IP에 고유 한 ID를 생성해야하며 (여러 게시물을 방지하는 데 도움이 됨) 가능한 한 짧아야한다는 것입니다. 이 고유 ID를 생성 할 여부에고유 한 GID 생성

qdkgzfvim 
4ge6gesv 
cztme7e4t 
45qqcvq 

모든 의견 :

$gid = base_convert(dechex(str_replace(".", "", $_SERVER['REMOTE_ADDR'])) . dechex(time()), 10, 36); 

이 이들과 같은 ID를 생성합니다 여기

는 PHP의 코드인가? 충돌이있을 수 있습니까? 숫자를 0으로 덧붙여 야하나요?

+3

많은 PC가 동일한 IP 주소를 공유 할 수 있다는 것을 알고 있습니까? –

+0

IP 단위 필터링은 웹 서비스에 일반적입니다. REMOTE_ADDR은 로그인 한 사용자의 경우 userid로 바꿀 수 있습니다. 아니면, 그것은 사용자 ID를 생성하는 데 사용되는 경우 동일한 IP에서 두 사람이 정확히 같은 초에 등록하지 못하게됩니다 ... – Dendory

+0

나는 주석 시스템에 대해 더 많은 생각을하거나 사용자 및 기타 ID를 생성하고 있습니다. 당신이 누군가 초당 두 개의 아이템을 생성 할 것으로 기대하지 않는 것들. 시간()은 계속 증가하기 때문에 영원히 고유하게 만드는 쉬운 방법입니다. 내 질문은 정수에서 16 진수로, 그 다음에는 36 진수로 변경됩니다. – Dendory

답변

1

실행 테스트는 :

5435a0e0 
bnd8 
543500 

자사의 데이터 손실 :

$part2 = dechex(time()); 

echo '<br/>' . $part2; 

echo '<br/>' . base_convert($part2, 10, 36); 

echo '<br/>' . base_convert(base_convert($part2, 10, 36), 36, 10); 

같은 뭔가를 생성합니다. 그래서 그것의 가역성이 없으므로, 그것은 유일성을 잃을 수도 있습니다.

+0

그게 내가 찾는 대답이야. 기본 변환 * 안 * 데이터를 잃지 말아야합니까? 나는 이것이 각 숫자를 개별적으로 가져 가지 않기 때문에 내부적으로 base_convert()가 작동하는 방식 때문이라고 생각합니다. 문자열 길이를 줄이려면 영숫자로 변환 할 수 있지만 데이터는 잃지 않는 함수를 만드는 방법은 없습니까? – Dendory

+0

@Dendory - 왜 10 바이트로 줄일까요? 이것은 미세 최적화이며 사람들은 더 큰 그림을 잃어 버리는 경향이 있습니다. BTW. 시간은 예측 가능하므로이 알고리즘도 있습니다. –

+0

이 테스트를 지적 해 주셔서 감사합니다. 문제는 ** 10 ** ** ** ** **이어야한다는 것입니다. 그렇다면 독특하고 시간이나 IP에 관계없이 고유 할 것입니다. – Dendory