Giả sử chúng ta có một hệ thống đăng nhập nơi người dùng phải cung cấp một userID duy nhất để nhận diện. Vì lý do bảo mật, chúng ta muốn làm mờ userID sao cho rất khó đoán được số gốc.
Về cơ bản, chúng ta cần viết hai hàm:
encode()
decode()
Hàm đầu tiên chuyển đổi số đầu vào thành ánh xạ chữ cái cơ số 26. Hàm thứ hai chuyển đổi chuỗi chữ cái ngược lại thành số ban đầu.
Mặc dù cách này không thực tế lắm vì hầu hết thuật toán băm không cung cấp chuyển đổi hai chiều, nhưng trong phạm vi câu hỏi này chúng ta không xem xét vấn đề đó.
Ví dụ – Nếu số là 31, thì:
encode(31) = 'ea' và decode('ea') = 31
Ví dụ
Mã thực hiện như sau:
const num = 31;
const encode = num => {
let res = '';
const legend = 'zabcdefghijklmnopqrstuvwxy';
while(num){
const rem = num % (legend.length);
res += legend[rem];
num = Math.floor(num / legend.length);
}
return res;
};
const decode = str => {
let num = 0;
const legend = 'zabcdefghijklmnopqrstuvwxy';
for(let i = 0; i < str.length; i++){
const ind = legend.indexOf(str[i]);
num += ind * Math.pow(legend.length, i);
}
return num;
}
console.log(encode(num));
console.log(decode('ea'));
Kết quả
Kết quả trong console sẽ là:
ea 31