입력 필드에 긴 URL을 쓸 수 있고 URL이 " http://www.example.org/abcdef
"(으)로 단축되는 URL 단축기 서비스를 만들고 싶습니다 .
" abcdef
" 대신 6자를 포함하는 다른 문자열이있을 수 있습니다 a-z, A-Z and 0-9
. 이는 56 ~ 57 십억 개의 문자열을 가능하게합니다.
내 접근 방식 :
세 개의 열이있는 데이터베이스 테이블이 있습니다.
- id, 정수, 자동 증가
- long, string, 사용자가 입력 한 긴 URL
- short, string, 단축 URL (또는 6 자)
그런 다음 긴 URL을 테이블에 삽입합니다. 그런 다음 " id
"에 대해 자동 증분 값을 선택하고 해시를 작성합니다. 이 해시는 " short
" 로 삽입되어야합니다 . 그러나 어떤 종류의 해시를 만들어야합니까? MD5와 같은 해시 알고리즘은 너무 긴 문자열을 만듭니다. 나는이 알고리즘들을 사용하지 않는다고 생각한다. 자체 빌드 알고리즘도 작동합니다.
내 생각:
" http://www.google.de/
"의 경우 자동 증가 ID를 얻습니다 239472
. 그런 다음 다음 단계를 수행하십시오.
short = '';
if divisible by 2, add "a"+the result to short
if divisible by 3, add "b"+the result to short
... until I have divisors for a-z and A-Z.
숫자를 더 이상 나눌 수 없을 때까지 반복 할 수 있습니다. 이것이 좋은 접근 방법이라고 생각하십니까? 더 좋은 아이디어가 있습니까?
이 주제에 대한 지속적인 관심으로 인해 JavaScript , PHP , Python 및 Java 를 구현 하는 GitHub에 대한 효율적인 솔루션을 발표했습니다 . 원하는 경우 솔루션을 추가하십시오 :)
encode()
과decode()
기능 을 모두 가질 수 있음을 의미합니다 . 따라서 단계는 다음과 같습니다. (1) 데이터베이스에 URL 저장 (2) 데이터베이스에서 해당 URL에 대한 고유 행 ID 가져 오기 (3)encode()
예273984
를 들어f5a4
(4)를 사용하여 정수 ID를 짧은 문자열로 변환f4a4
합니다. 공유 가능한 URL (5) 짧은 문자열 (예 :)에 대한 요청을 받으면 (6) 주어진 ID에 대한 데이터베이스에서 URL을 조회20a8
하여 문자열을 정수 ID로 디코딩하십시오decode()
. 변환을 위해 다음을 사용하십시오 : github.com/delight-im/ShortURL