ฉันต้องการสร้างบริการตัวย่อ URL ที่คุณสามารถเขียน URL แบบยาวลงในช่องป้อนข้อมูลและบริการจะย่อ URL ให้เป็น " http://www.example.org/abcdef
"
แทนที่จะเป็น " abcdef
" จะมีสตริงอื่นที่มีอักขระหกตัวที่บรรจุa-z, A-Z and 0-9
อยู่ นั่นทำให้สตริงที่เป็นไปได้ 56 ~ 57 พันล้าน
แนวทางของฉัน:
ฉันมีตารางฐานข้อมูลที่มีสามคอลัมน์:
- id, จำนวนเต็ม, การเพิ่มอัตโนมัติ
- long, string, URL แบบยาวที่ผู้ใช้ป้อน
- สั้น, สตริง, URL ที่ย่อ (หรือเพียงแค่หกตัวอักษร)
ฉันจะแทรก URL ที่มีความยาวลงในตาราง จากนั้นฉันจะเลือกค่าการเพิ่มอัตโนมัติสำหรับ " id
" และสร้างแฮชของมัน ควรแทรกแฮชนี้เป็น " short
" แต่ควรจะสร้างแฮชแบบไหน อัลกอริธึมแฮเช่น MD5 สร้างสายยาวเกินไป ฉันไม่ได้ใช้อัลกอริทึมเหล่านี้ฉันคิดว่า อัลกอริทึมที่สร้างขึ้นเองจะทำงานเช่นกัน
ความคิดของฉัน:
สำหรับ " http://www.google.de/
" 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.
สามารถทำซ้ำได้จนกว่าจำนวนจะไม่สามารถหารได้อีกต่อไป คุณคิดว่านี่เป็นวิธีการที่ดีหรือไม่? คุณมีความคิดที่ดีกว่านี้ไหม?
เนื่องจากความสนใจอย่างต่อเนื่องในหัวข้อนี้ผมได้รับการตีพิมพ์เป็นโซลูชั่นที่มีประสิทธิภาพในการ GitHubกับการใช้งานสำหรับJavaScript , PHP , PythonและJava เพิ่มโซลูชันของคุณหากคุณต้องการ :)
encode()
และdecode()
ฟังก์ชั่น ขั้นตอนจึง: (1) บันทึก URL ในฐานข้อมูล (2) รับ ID แถวที่ไม่ซ้ำกัน URL นั้นจากฐานข้อมูล (3) รหัสแปลงจำนวนเต็มสตริงสั้น ๆ ที่มีencode()
เช่น273984
การf5a4
(4) ใช้สตริงสั้น (เช่นf4a4
) ในของคุณ URL ที่แชร์ได้ (5) เมื่อได้รับคำขอสตริงสั้น (เช่น20a8
) ให้ถอดรหัสสตริงเป็น ID จำนวนเต็มด้วยdecode()
(6) ค้นหา URL ในฐานข้อมูลสำหรับ ID ที่กำหนด สำหรับการแปลงใช้: github.com/delight-im/ShortURL