ตัวเข้ารหัสและถอดรหัส Base36

แปลงข้อความ ไบต์เลขฐานสิบหก หรือไฟล์เป็น Base36 ซึ่งใช้ชุดตัวอักษรจากตัวเลขสิบตัวและตัวอักษร 26 ตัว และถอดรหัสสตริง Base36 กลับเป็นไบต์ เลือกเอาต์พุตเป็นตัวพิมพ์ใหญ่ได้

ทำงานภายในเบราว์เซอร์ของคุณทั้งหมด ไม่มีการอัปโหลดข้อมูลใด ๆ

วิธีใช้งาน

  1. เลือก “เข้ารหัส” เพื่อแปลงข้อความเป็น Base36 หรือ “ถอดรหัส” เพื่อแปลง Base36 กลับเป็นข้อความ
  2. พิมพ์หรือวางอินพุต หรือเปิดไฟล์ขนาดเล็ก (ไม่เกินประมาณ 20 KB)
  3. เปิด “ตัวพิมพ์ใหญ่” หากต้องการตัวอักษรพิมพ์ใหญ่ในเอาต์พุต
  4. คัดลอกผลลัพธ์หรือดาวน์โหลดเป็นไฟล์

Base36 คืออะไร

Base36 เขียนข้อมูลด้วยตัวเลขสิบตัวและตัวอักษรละติน 26 ตัว คือ 0-9 ตามด้วย a-z นี่คือชุดตัวอักษรที่ใหญ่ที่สุดที่สร้างได้จากตัวเลขและตัวอักษรโดยไม่สนใจตัวพิมพ์ สตริง Base36 จึงใช้ได้กับระบบที่เปลี่ยนหรือไม่สนใจตัวพิมพ์ อักขระแต่ละตัวเก็บข้อมูลประมาณ 5.17 บิต เอาต์พุตจึงมีขนาดประมาณ 1.55 เท่าของอินพุต สั้นกว่า Base32 เล็กน้อย

เนื่องจาก 36 ไม่ใช่กำลังของสอง จึงตัดไบต์เป็นกลุ่มบิตตรง ๆ ไม่ได้ เครื่องมือนี้จึงอ่านอินพุตทั้งหมดเป็นจำนวนเต็มไม่มีเครื่องหมายขนาดใหญ่หนึ่งจำนวน แล้วแปลงเป็นเลขฐาน 36 ซึ่งเป็นวิธีเดียวกับที่ Base58 ใช้ ตัวเลขจะสูญเสียไบต์ศูนย์ที่นำหน้า แต่ละไบต์ดังกล่าวจึงเขียนเป็น 0 นำหน้าและกู้คืนเมื่อถอดรหัส การคำนวณนี้จะช้าลงเมื่ออินพุตมีขนาดใหญ่ เครื่องมือจึงรับได้ไม่เกินประมาณ 20 KB

Base36 ใช้ที่ไหนบ้าง

  • ID แบบสั้น บริการย่อ URL หมายเลขคำสั่งซื้อ และรหัสตั๋วมักแสดง ID ตัวเลขจากฐานข้อมูลเป็นเลขฐาน 36 ตัวอย่างเช่น Reddit ใช้เลขฐาน 36 สำหรับ ID ของโพสต์และความคิดเห็น
  • ที่ที่ไม่แยกตัวพิมพ์ ชื่อ DNS และระบบไฟล์บางระบบไม่สนใจตัวพิมพ์ ด้วยเหตุนี้ IPFS จึงใช้ตัวระบุบางชนิดในรูป Base36 ในที่อยู่ของ subdomain gateway
  • ตัวเลขในโค้ด เลขฐาน 36 เป็นฐานสูงสุดที่ภาษาโปรแกรมส่วนใหญ่รองรับในตัวสำหรับการแปลงจำนวนเต็ม

หากระบบคงตัวพิมพ์ไว้และคุณต้องการสตริงตัวอักษรและตัวเลขที่สั้นที่สุด Base62 จะกะทัดรัดกว่า

ตัวเลข Base36 ในโค้ด

หน้านี้เข้ารหัสไบต์ หากต้องการแปลงจำนวนเต็ม ให้ใช้ฟังก์ชันในตัวของภาษาที่คุณใช้ หรือ ตัวแปลงเลขฐาน

// JavaScript
(1000000).toString(36)        // 'lfls'
parseInt('lfls', 36)          // 1000000
123456789012345678901234567890n.toString(36)   // ใช้ BigInt สำหรับค่าขนาดใหญ่

# Python
int('lfls', 36)               # 1000000
# ไม่มีฟังก์ชันในตัวสำหรับการแปลงย้อนกลับ

parseInt สูญเสียความแม่นยำเมื่อค่าเกิน Number.MAX_SAFE_INTEGER สำหรับค่าที่ใหญ่กว่านั้น ให้สะสมหลักแต่ละหลักเป็น BigInt ด้วยตนเอง

ข้อกำหนด

ชุดตัวอักษร0-9 a-z
ขนาดเอาต์พุตประมาณ 155% (แปลงแบบเลขจำนวนใหญ่)
แพดดิงไม่มี
มาตรฐานไม่มีมาตรฐานอย่างเป็นทางการ
แยกตัวพิมพ์เล็ก-ใหญ่ไม่ใช่

ตัวอย่าง

อินพุต (UTF-8)เอาต์พุต
Hello, World!fg3h7vqw7een6jwwnzmp
Base64.is76f8bz4veeatf7
你好2h5exfqm65

คำถามที่พบบ่อย

Base36 แยกตัวพิมพ์เล็ก-ใหญ่หรือไม่

ไม่แยก เอาต์พุตเป็นตัวพิมพ์เล็กโดยค่าเริ่มต้น และตัวเลือก “ตัวพิมพ์ใหญ่” จะเปลี่ยนเป็นตัวพิมพ์ใหญ่ ตัวถอดรหัสรับได้ทั้งสองแบบ

ทำไมเครื่องมืออื่นจึงให้ผลลัพธ์ Base36 ต่างออกไป

Base36 ไม่มีมาตรฐานอย่างเป็นทางการ บางเครื่องมือเข้ารหัสตัวเลข บางเครื่องมือเข้ารหัสไบต์ และแต่ละเครื่องมือจัดการไบต์ศูนย์ที่นำหน้าต่างกัน เครื่องมือนี้เข้ารหัสไบต์ของอินพุตเป็นตัวเลขขนาดใหญ่หนึ่งจำนวน และเขียนไบต์ศูนย์ที่นำหน้าแต่ละไบต์เป็น 0

มีขีดจำกัดขนาดหรือไม่
มี คือประมาณ 20 KB เพราะการแปลงแบบเลขจำนวนใหญ่ใช้เวลานานขึ้นเมื่ออินพุตใหญ่ขึ้น สำหรับไฟล์และข้อมูลขนาดใหญ่ Base32 หรือ Base64 เหมาะสมกว่า
จะแปลงตัวเลขเป็น Base36 ได้อย่างไร
ใช้ ตัวแปลงเลขฐาน ซึ่งแสดงค่าเลขฐานสิบใน Base36 และฐานอื่น ๆ หน้านี้ถือว่าอินพุตเป็นข้อความหรือไบต์ การพิมพ์ 100 จึงเป็นการเข้ารหัสอักขระ 1, 0 และ 0 ไม่ใช่ตัวเลขหนึ่งร้อย