https://sqids.org/javascript
https://github.com/sqids/sqids-javascript
数値の組み合わせから一意の識別子を生成し sns サービスの url みたいな運用するやつ。
$ npm i sqidsアルゴリズムの関係上 「適当に改ざんされた id から元の数値が decode されることがある」 ため、parse の際に id が正当なものであるかの検査は手動で行う必要がある 。
元数値 ID
[1, 2, 3] => #SDFGHJK (encode)
ID 元数値
#SDFGHJK => [1, 2, 3] (decode)
#SDFGHJ0 => [1, 2, 3] (decode で id が若干違うのに同じ元数値がでることがある)
import Sqids from 'sqids'
export const ENCODER = new Sqids({ minLength: 16 })
export const getUrlId = (articleId, versionId) => {
const params = [
articleId,
versionId,
]
return ENCODER.encode(params) // 86Rf07xd4z890kdo
}
export const parseUrlId = (id: ReturnType<typeof getUrlId>[0]) => {
const params = ENCODER.decode(id) // 86Rf07xd4z890kdo => [1, 2]
// verify valid of id
if (id !== getUrlId(...params)) {
return {} // 86Rf07xd4z890XXX みたいに改ざんされた ID だった場合に落とすみたいな
}
return {
articleId: params.at(0),
versionId: params.at(1),
}
}