2011-11-08 11 views
8

나는 클라이언트가 서비스 요청을 요청할 때마다 생성하는 고유 식별자를 가지고 있습니다.고객을위한 PHP 고유 식별자

function makeUnique() { 
$start_time = uniqid(microtime(1)); 
$duration = sprintf('%0.24f', $start_time); 
return date('dmYHis').$duration; 
} 

echo makeUnique(); 

이 출력 : 내가 수와 071120112032291320,715,949 얻을 어떤 이유로 071120112032291320715949.928639888763427734375000

ID가 생성되면

는 ID가 여기에 데이터베이스에 내 코드를

을 삽입됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

6

"."을 제거해야합니다. (점). 아마도 점 뒤에 숫자를 제거하는 INT를 사용하고있을 것입니다.

return str_replace('.', '', date('dmYHis').$duration);

및 필드가 충분히 큰 있는지 확인 - VARCHAR처럼 (50)

내 추천은 단순히 MD5에게

md5($clientid)

당신을 사용하여 클라이언트 ID를 해시하는 것 mysql 필드가 char (32)

+0

은 (는) md5가 사용하기 좋은가요? –

+2

이것을 읽으십시오 : http://developer.yahoo.com/security/ –

+0

팁을 주셔서 감사합니다 –

4

코드에 이미 있습니다. . PHP 함수 uniqid()는 ... 고유 한 ID를 제공합니다. 당신은 (그것을 필요는 없습니다하지만) 정말 정말 정말 정말 독특한 확인하려면, 너무 좋아, 끝까지 시간을() 추가 :

return uniqid().time(); 

이 또한 숫자와 혼합 문자를 반환 (높은 엔트로피) , 다음과 같이 응답 :

4eb8895a76edc1320716634 
+0

당신은 다음과 같이 할 수도 있습니다 'uniqid (' ', TRUE)'이것은 엔트로피를 추가합니다 (조합 된 선형 합동 생성기를 사용하여) 반환 값의 끝에서 결과가 고유 할 가능성을 높입니다. – DarkSide