Công cụ mã hóa và giải mã Base62

Chuyển văn bản, byte hex hoặc tệp sang Base62 và ngược lại. Đầu ra chỉ chứa chữ số và chữ cái, nên an toàn khi dùng trong URL, tên tệp và mã định danh mà không cần thoát ký tự.

Chạy hoàn toàn trong trình duyệt của bạn. Không có gì được tải lên.

Cách sử dụng

  1. Chọn Mã hóa để chuyển văn bản sang Base62, hoặc Giải mã để chuyển Base62 trở lại thành văn bản.
  2. Chọn thứ tự bảng ký tự khớp với hệ thống của bạn: 0-9 A-Z a-z (mặc định) hoặc 0-9 a-z A-Z.
  3. Nhập hoặc dán dữ liệu đầu vào, hoặc mở một tệp nhỏ (tối đa khoảng 20 KB).
  4. Sao chép kết quả hoặc tải xuống dưới dạng tệp.

Base62 là gì?

Base62 dùng mười chữ số, 26 chữ cái viết hoa và 26 chữ cái viết thường. Đây là bảng ký tự lớn nhất chỉ gồm chữ cái và chữ số, nên kết quả không cần thoát ký tự khi dùng trong URL, tên tệp, khóa cơ sở dữ liệu hay mã định danh trong mã nguồn. Mỗi ký tự mang khoảng 5,95 bit, khiến đầu ra lớn khoảng 1,34 lần so với đầu vào, gần gọn như Base64 nhưng không có +, /, =, - hay _.

Vì 62 không phải lũy thừa của hai, công cụ này xem toàn bộ dữ liệu đầu vào như một số lớn duy nhất và chuyển nó sang cơ số 62, giống như Base58 và Base36. Mỗi byte 0 ở đầu được ghi thành một ký tự 0 ở đầu để được giữ nguyên khi mã hóa rồi giải mã lại. Dữ liệu đầu vào bị giới hạn ở khoảng 20 KB vì phép tính trở nên chậm với dữ liệu lớn.

Không có một tiêu chuẩn Base62 duy nhất

Khác với Base64, Base62 không có RFC nào, và các bản triển khai khác nhau ở những điểm khiến đầu ra của chúng không tương thích với nhau:

  • Thứ tự bảng ký tự. Công cụ này hỗ trợ 0-9A-Za-z (mặc định) và 0-9a-zA-Z. Một số thư viện khác lại đặt chữ cái trước chữ số.
  • Các số 0 ở đầu. Một số bản triển khai giữ một ký tự 0 cho mỗi byte 0 ở đầu như công cụ này, một số bỏ chúng đi, còn các định dạng có độ dài cố định thì đệm kết quả cho đủ độ rộng quy định.
  • Dữ liệu được mã hóa. Nhiều hàm Base62 mã hóa một số nguyên, chẳng hạn ID trong cơ sở dữ liệu, thay vì một chuỗi byte. Một số khác lại chia dữ liệu thành các khối có kích thước cố định.

Nếu một chuỗi từ hệ thống khác giải mã ra ký tự vô nghĩa ở đây, hãy thử tùy chọn bảng ký tự còn lại. Nếu vẫn không được, có lẽ hệ thống đó dùng một phương pháp khác.

Base62 được dùng ở đâu

Các dịch vụ rút gọn URL biến một ID tự tăng thành một mã ngắn: bảy ký tự Base62 đủ cho hơn 3,5 nghìn tỷ giá trị. Các ID có thể sắp xếp như KSUID dùng dạng Base62 cố định dài 27 ký tự, và nhiều dịch vụ dùng Base62 cho khóa API và token vì chỉ cần nhấp đúp là chọn được cả chuỗi và có thể dán nó ở bất cứ đâu. Để chuyển đổi một số nguyên, hãy dùng công cụ chuyển đổi cơ số, hoặc vài dòng mã:

// JavaScript: số nguyên (BigInt) sang Base62
const A = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
function toBase62(n) {
  let s = '';
  do { s = A[Number(n % 62n)] + s; n /= 62n; } while (n > 0n);
  return s;
}
toBase62(123456789n);   // '8M0kX'

Đặc tả

Bảng ký tự0-9 A-Z a-z
Kích thước đầu raKhoảng 134% (chuyển đổi số lớn)
Phần đệmKhông có
Tiêu chuẩnKhông có tiêu chuẩn chính thức
Phân biệt hoa thườngCó

Ví dụ

Đầu vào (UTF-8)Đầu ra
Hello, World!1wJfrzvdbtXUOlUjUf
Base64.isNWxjrFq4r3rv
你好19PqtKE1t

Câu hỏi thường gặp

Base62 có an toàn cho URL không?
Có. Nó chỉ dùng A-Z, a-z và 0-9, những ký tự không bao giờ cần thoát trong URL. Base64URL cũng an toàn cho URL, nhưng có thêm các ký tự - và _.
Vì sao chuỗi Base62 của tôi giải mã ra văn bản sai?

Các bản triển khai Base62 khác nhau về thứ tự bảng ký tự và phương pháp. Hãy chuyển qua lại giữa bảng ký tự 0-9A-Za-z và 0-9a-zA-Z. Nếu cả hai đều không được, có lẽ chuỗi được tạo từ một số nguyên hoặc bằng một thuật toán khác.

Base62 có phân biệt chữ hoa và chữ thường không?

Có. Chữ hoa và chữ thường biểu thị các giá trị khác nhau, nên tuyệt đối không được chuyển một chuỗi Base62 sang toàn chữ hoa hoặc toàn chữ thường.

Nên dùng Base62 hay Base58?
Base58 bỏ đi 0, O, I và l để người dùng không nhầm lẫn khi chép tay. Base62 giữ lại mọi chữ cái và chữ số nên ngắn hơn một chút. Hãy chọn Base58 cho chuỗi mà con người phải gõ và Base62 cho chuỗi do máy xử lý.