2017-06-15 12 views
0

私は特別なユニークな予約IDが必要です。これは、電話で簡単に読み上げることができます。シンプルなユニークな予約ID機能を作成する

これは、5文字の長さで、かつ唯一のこれらの文字を使用する必要があります。

var letters = "ABCDEFGHJKMNPQRSTUXY"; 

私はStackOverflowの上でこの機能が見つかりましたが、それは私の文字から文字を取ってもらうと5に自分自身を制限するために苦労していますchars。

var uniqueId = function() { 
    return Math.random().toString(36).substr(2, 16); 
}; 

すべてのヘルプは、この

var letters = "ABCDEFGHJKMNPQRSTUXY"; 
 
var uniqueId = function() { 
 
    var text = ""; 
 
    for (var i = 0; i < 5; i++) { 
 
    text += letters.charAt(Math.floor(Math.random() * letters.length)); 
 
    } 
 
    return text; 
 
}; 
 
console.log(uniqueId());

[number of possible char]^[lenght of the generatet id]よう

+1

なぜ5つだけですか?少数の "ユニークな"注文にあなた自身を限定しています。あなたが小さい滞在を期待していない限り? – evolutionxbox

+0

[JavaScriptでGUID/UUIDを作成する](https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript)を参照してください。 – Satpal

+1

「少数」ehh ..数学を試してみてください20x20x20x20x20: - Dもし私が多くの予約をしていれば、私はそれを6文字に拡張することを約束します:-D – torbenrudgaard

答えて

1

参照機能、uniqueId()の量を倍にしたい場合は、アカウントに上部/下部ケースを取る(これは可能性がありますこの関数は同じ文字列を複数回発生させることができ、それは本当にユニークではありません):

function uniqueId(stringLength, possible) 
{ 
    stringLength = stringLength || 5; 
    possible = possible || "ABCDEFGHJKMNPQRSTUXY"; 
    var text = ""; 

    for(var i = 0; i < stringLength; i++) { 
    var character = getCharacter(possible); 
    while(text.length > 0 && character === text.substr(-1)) { 
     character = getCharacter(possible); 
    } 
    text += character; 
    } 

    return text; 
} 

function getCharacter(possible) { 
    return possible.charAt(Math.floor(Math.random() * possible.length)); 
} 
+0

同じ文字を並べて2つを避ける方法はありますか? "ABCAB"はOKです - "ABBCD"はそうではありません。 – torbenrudgaard

+0

はい、更新を参照してください。 – Ganhammar

+1

パーフェクト! - 私が必要とするものを正確に - Ganhammarあなたは今私たちのグローバル関数ライブラリに入れました:-)))ありがとう。 – torbenrudgaard

1

何か:-)いただければ幸いです - あなたは3.200.000ユニークなIDを持っていますので... 3.200.001番目のIDはもうユニークではありません...

あなたが5文字の文字列については、以下のIDのユニークな...

var letters = "ABCDEFGHJKMNPQRSTUXYabcdefghjkmnpqrstuxy"; 
 
    var uniqueId = function() { 
 
     var text = ""; 
 
     for (var i = 0; i < 5; i++) { 
 
     text += letters.charAt(Math.floor(Math.random() * letters.length)); 
 
     } 
 
     return text; 
 
    }; 
 
    console.log(uniqueId());

+0

には、同じ文字を2つ並べて表示しない方法がありますか? "ABCAB"はOKです - "ABBCD"はそうではありません。 – torbenrudgaard

+1

この例のようなものは、それを解決します。デモではAB文字(https:// jsfiddle)しか使用されませんでした。net/zxos7456/1 /(今では文字をチェックすることを考慮して、インデックスをチェックすることも可能性があります) –

1

まあ、いくつか他の人は私を倒すが、ここで読むことが非常に簡単です選択肢です。また、2つの連続した文字が同じでないようにしています(OPの後のコメントで追加されたもの)。

function uniqueId() 
{ 
     var letters = "ABCDEFGHJKMNPQRSTUXY"; 
     var result=""; 
     while (result.length<5) 
     { 
      var rand_int = Math.floor((Math.random() * 19) + 1); 
      var rand_chr= letters[rand_int]; 
      if (result.substr(-1, 1)!=rand_chr) result+=rand_chr; 
     } 
     return (result); 
} 
関連する問題