オンライン購入の確認コードとして使用する短い固有の英数字の値を生成したいと考えています。https://github.com/broofa/node-uuidを調べましたが、uuid が長すぎるため、8 文字程度の長さにしたいと考えています。これを達成するための最良の方法は何ですか?
6 に答える
10/23/15:以下のhashidsの回答も参照してください!
URL短縮モデルから借用して、次のようなことを行うことができます。
(100000000000).toString(36);
// produces 19xtf1ts
(200000000000).toString(36);
// produces 2jvmu3nk
番号をインクリメントして一意に保ちます。
function(uniqueIndex) {
return uniqueIndex.toString(36);
}
これは、これが順序付けられる方法(基本的な増分による)である程度の予測可能性を気にしない「単一インスタンス」サービスでのみ実際に役立つことに注意してください。多数のアプリケーション/DBインスタンスにわたって真に一意の値が必要な場合は、コメントのいくつかごとに、より完全な機能を備えたオプションを検討する必要があります。
shortId モジュール ( https://www.npmjs.com/package/shortid ) をインストールします。デフォルトでは、shortid は URL に適した 7 ~ 14 個の文字 (AZ、az、0 ~ 9、_-) を生成しますが、必要に応じて - と _ を他の文字に置き換えることができます。ここで、オブジェクトがデータベースに保存されるときに、何らかの方法でこの shortId をオブジェクトに貼り付ける必要があります。最善の方法は、次のようにスキーマに貼り付けることです。
var shortId = require('shortid');
var PurchaseConfirmationSchema = mongoose.Schema({
/* _id will be added automatically by mongoose */
shortId: {type: String, unique: true, default: shortId.generate}, /* WE SHOULD ADD THIS */
name: {type: String},
address: {type: String}
});
私はすでにここで自分自身に同様の質問に答えました:
各オンライン購入が一意の URL に関連付けられている場合は、データベース接続や Web サービスを必要としない単純な短いパッケージのバックエンドを使用できます。
var shorten=require('simple-short');
shorten.conf({length:8}); // Default is 4.
code1=shorten('http://store.com/purchase1');
code2=shorten('http://store.com/purchase2');
//.. so on