Você está tentando converter uma base 16 (hexadecimal) para base 36 (26 caracteres em alfabeto mais 10 números). Uma maneira simples pode ser simplesmente usar
parseInt
's parâmetro radix para analisar o id hexadecimal e, em seguida, chamar .toString(36)
para converter isso em base-36. O que transformaria "507f191e810c19729de860ea" em "VDFGUZEA49X1V50356", reduzindo o comprimento de 24 para 18 caracteres. function toBase36(id) {
var half = Math.floor(id.length / 2);
var first = id.slice(0, half);
var second = id.slice(half);
return parseInt(first, 16).toString(36).toUpperCase()
+ parseInt(second, 16).toString(36).toUpperCase();
}
function toBase36(id) {
var half = Math.floor(id.length / 2);
var first = id.slice(0, half);
var second = id.slice(half);
return parseInt(first, 16).toString(36).toUpperCase()
+ parseInt(second, 16).toString(36).toUpperCase();
}
// Ignore everything below (for demo only)
function convert(e){ if (e.target.value.length % 2 === 0) base36.value = toBase36(e.target.value) }
var base36 = document.getElementById('base36');
var hex = document.getElementById('hex');
document.getElementById('hex').addEventListener('input', convert, false);
convert({ target: { value: hex.value } });
input { font-family: monospace; width: 15em; }
<input id="hex" value="507f191e810c19729de860ea">
<input id="base36" readonly>