2011-04-28 2 views
3

재미있는 프로젝트처럼, 개인적인 용도로 간단한 URL 단축기를 만들고 싶었지만, 좋아하는 것들을 bit.ly 등의 다른 단축키에서 통합하려고했습니다. 그래서 짧은 URL ID를 할당 할 때 방해가되었습니다.고유 한 8 자의 16 진 문자열 생성

지금은 코드를 수동으로 할당하고 있지만 자동화하고 싶습니다. 난 그냥 증분 ID를 할당하여 쉽게 할 수있는 (내가 MySQL 데이터베이스에 할당 된 자동 증가 값을 사용하여 할 수있는 URL을 PHP dechex() 함수를 사용하여 수행 할 수 있다고 생각하지만) 다른 단축키가 임의 것으로 보인다.

나는 데이터베이스에서 터무니없는 숫자의 URL을 얻지는 못하지만 데이터베이스에서 많은 URL로 과부하가되는 임의의 고유 ID를 만드는 프로세스를 효율적으로 유지하려고합니다. 중복을 만들지 않고 천천히 실행하지 않는 ID를 만드는 시스템을 만드는 방법에 대해서는 전혀 모릅니다.

답변

2

참조 : PHP short hash like URL-shortening websites 대답은 당신이 할 수 있습니다 : http://blog.kevburnsjr.com/php-unique-hash

두 번째 링크는 특히 유용 할 수 있으며 현재 ID를 짧게 해시 할 수 있습니다.

+0

나는 당신과 @ a3_nm이 나에게 그것을 확신하게되면서이 접근법을 좋아한다. 물론 그것은 무작위가 아니며 8 자일 수도는 없지만 시스템이 갖게 될 한계점과 실제로 재미만을위한 프로젝트라는 한계점을 지니고 있다고 생각합니다. 여러분의 도움에 감사드립니다. 저는 Base36 또는 Base64 시스템을 사용하여 코드를 생성 할 것입니다. –

0

임의의 ID를 생성하고 이미 할당되었는지 확인할 수 있으며 이미 사용 된 ID를 치는 경우에는 새로운 ID를 그릴 수 있습니다. 사용자가 이미 URL 중 하나를 쿼리 할 때마다이를 수행 할 것이므로 이미 할당되었는지 확인해야합니다.

임의의 16 진수 문자열을 원하면 빠르고 무거운 방법은 임의의 큰 숫자를 생성하고 sha1 또는 다른 해시 함수를 사용하여 해시 한 다음 처음 8자를 가져 오는 것입니다. Base64는 더 많은 URL을 더 적은 문자로 묶을 수 있기 때문에 16 진수가 아닌 16 진수가 필요한 이유는 모르겠다. [사실, URL을 해시하여 ID를 생성 할 수 있습니다. 보안 암호 해시를 사용하는 경우 무작위 값을 해시하는 것과 같아야하며 동일한 URL이 항상 동일한 키를 가져와 중복을 방지 할 수 있습니다.]

미리 정의 된 숫자를 누르거나 너무 자주 충돌하면 더 긴 ID를 생성하는 것을 잊지 마세요. ID가 부족하고 많은 충돌이 발생하면 속도가 느려지는 것을 원하지 않기 때문입니다.

충돌 가능성과 이러한 모든 종류의 물건에 대한 이론적 인 보장을 원한다면 사용하는 해싱 스키마에 따라 이론적으로 많은 부분이 있습니다.

오, 그리고 단지 쪽지에 순차적 ID를 사용하는 URL 단축기가 있습니다 (예 : http://lilurl.sourceforge.net/). 나는 ... 그것은 일반적으로 피할 수 있다는 주된 이유는 그들이 선택한 URL로 공격 ID를 연결하는 타이밍의 좋은 감각을 가진 사람을 방지하기 위해 생각

+0

그래, 다른 사람이 비교할 항목 수가 많은 문제를 지적하기 전까지는 다시 그리는 방법을 사용하는 것이 좋을 것이라고 생각했습니다. –

1

MD5 또는 SHA-1과 같은 일반적인 해시 함수 중 하나를 사용하여 URL의 해시를 가져와 16 진수 형식으로 인쇄하고 마지막 8 자 (또는 처음 8 자)를 가져옵니다. 이렇게하면 URL이 이미 제출되었는지 여부를 항상 판단 할 수 있다는 이점이 있습니다.

+0

그건 제가 처음 만났던 해결책 중 하나였습니다. 그러나 문제는 내가 선택한 8 개의 문자가 유일 할 것이라는 확신 할 수있는 방법이 없다는 것입니다. 전체 해쉬 만 유일 할 것입니다. –

+0

전체 해시가 고유 할 수 있다고 보장 할 수도 없지만 모든 실제적인 목적을 위해 충분히 근접합니다. 만약 처음 8 글자가 실용적인 목적을 위해 충분히 가깝지 않다면 (나는 생각한다. - 다른 많은 소프트웨어가 그것을 완전한 해시의 편리한 고유 한 약어로 사용한다), 결정적인 방법을 제시하고자한다. 해시를 폴백으로 수정하십시오 (어쩌면 전체 해시에서 8 자의 다른 창을 가져갈 수 있습니다). –

+0

네가 맞을 것 같아. 결국 나는 안전하고 충돌이 전혀 없는지 확인하고 싶습니다. 그래도 통찰력을 가져 주셔서 감사합니다. –

관련 문제