No ale nie ważne jaki separator ustawisz, np te 000
, to to Twoje id
może siec zgubić, np jak użyjesz id
70001
. Wtedy Twoja funkcja pomyśli że id
to jeden. Ja bym na Twoim miejscu nie robił żadnych cudów z 000
, tylko bym to moje id
zapisał w base 9, dzięki temu jedyne cyfry jakie wystąpią w id
to 0-8
, a nie 0-9
. Dzięki temu, cyfry 9
możesz użyć jako separatora.
function encode(realNumber, id) {
return '' + realNumber + '9' + parseInt(id).toString(9);
}
Potem żeby to odczytać, znajdujesz ostatnią 9tkę, i to co od lewej to jest Twój id
.
function decode(value) {
const separatorIndex = value.lastIndexOf('9');
if (separatorIndex === -1) {
throw "Malformed";
}
const realNumber = parseInt(value.slice(0, separatorIndex));
const id = parseInt(value.slice(separatorIndex + 1), 9);
return [realNumber, id];
}
noi użycie jest banalne:
const encryptedString = encode(123456, 700099);
// masz stringa
const [number, id] = decode(encryptedString);
number; // 123456
id; // 70099;
To tak żeby było proste.
Tak na prawde, gdybyś chciał zrobić na prawdę dobre rozwiązanie, takie general-purpose, to powinieneś wziąć dane jakie chcesz, zserializować je (np do JSON'a), i zapisać je w Base 10 (bo taki masz dopuszczalny format). Coś jak Base64, tylko to by Ci wypluło też litery, a Ty możesz mieć tylko 0-9
, więc musiałbyś zenkodować do base10.