2013-07-12 4 views
-1

임의의 텍스트를 숫자로 변환해야합니다. 그러나 램덤 텍스트는 항상 같은 번호로 변환되어야합니다. 예를 들면 : 나는 같은 수의 characters 2 개 문자열이있는 경우PHP로 임의의 텍스트를 숫자로 변환

xxxx -> 10 
testing -> 396 
stackoverflow -> 72 

나는 그들이 (적어도 대부분의 시간에서) 다른 번호를 가지고하는 데 필요한 string 원인을 변환하는 문자의 번호를 사용하지 못할.

범위 내에이 번호가있을 필요는 없습니다. 아니! 그것은 임의의 숫자가 될 수 있습니다. 왜냐하면 특정 문자열이 주어진다면 항상 같을 것이기 때문입니다.

+0

이 기능을 사용할 수 있습니까? http://stackoverflow.com/questions/1836152/using-php-to-convert-ascii-character-to-decimal-equivalent –

+0

텍스트의 제약 조건은 무엇입니까? 영숫자, 알파 만, 소문자 만 ??? – Orangepill

+0

해당 게시물에 제공되는 속도가 느립니다. 오드는 훌륭하지만 첫 번째 숯에서만 효과가 있습니다! 고마워요 –

답변

4

당신은 해시 (md5, sha1 등)를 사용하여 시도해 볼 수도 있습니다 : 동일한 문자열의

$number = hexdec(md5("hello world")); 
$number = hexdec(sha1("hello world")); 

해시를 같은 번호로 변환합니다.

+0

다시 충돌 – Orangepill

+0

이 경우에는'crc32'가 더 빠를 것입니다. 마지막으로 가장 중요한 것은 결과가 정수에 맞지 않을 경우 float로 변환됩니다. – apartridge

+0

충돌을 방지하기 위해 소금을 첨가 할 수 있습니까? – Rainulf

2

약;

$number = crc32($string); 

저렴해야하며, 정수 출력을 제공하고, 사용 사례에 적합한 임의성을 만들어야합니다.

+0

+1 나는 위대한 타협안으로 upvote거야. – Orangepill

0

표시된 다른 방법은 충돌이 발생할 가능성이 있습니다. 다음과 같이해서는 안됩니다.

$num = ""; 
for($i = 0; $i < strlen($str); $i++) 
    $num .= str_pad(ord($str[$i]), 3 "0", STR_PAD_LEFT); 
return $num; 
+0

32 비트를 빨리 넘겨 버리고 상당히 많은 비트를 낭비합니다. – apartridge

+0

매우 쉽게 ....하지만 md5 또는 sha1에 의존하는 것들도 마찬가지입니다. – Orangepill

+0

나는 그것에 동의합니다. 나는 crc32에 대한 나의 대답을 홍보하고있다. – apartridge

관련 문제