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.
Kopiuj
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.
Kopiuj
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:
Kopiuj
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.