2016-12-04 6 views
0

に基づいて一意の番号を生成するが、私は、文字列var input = "Foo"を持っていると私はその文字列から100%のユニークな番号が必要と言うことができます、私はJavascriptが文字列

for (var i = 0, len = input.length; i < len; i++) { 
     output += input[i].charCodeAt(0) 
} 

のようなものを試してみました。しかし、これはW8MYSMとの両方のような重複を生成し、 id:149を返します。

このようなアルゴリズムがありますか?

+1

を? –

+1

これは本質的に「完璧な」ハッシュアルゴリズムが行うものではありませんか? – Aurora0001

+1

@OriDrori暗号 –

答えて

2

ハッシュ関数が必要です。ハッシュ関数は一般的にユニークではありません(衝突のように)が、キースペースは非常に広がり、アプリ内で見つけることなく生涯にわたって生きることができます。

JavaScriptのSHA1とSHA256の実装を最初に探します。ノードを使用している場合はcrypto moduleをご覧ください。

+1

一意の番号を保証する必要がある場合は、以前のIDのトラックを保持し、一意の番号を持つまで、衝突時に文字列に塩を追加します。しかし、それはいつも可能ではありません。 –

0

js文字列の単純なhash関数です。私のフィドルはW8NYSMため貴様の結果を示している

String.prototype.hashCode = function() { 
    var hash = 0, i, chr, len; 
    if (this.length === 0) return hash; 
    for (i = 0, len = this.length; i < len; i++) { 
    chr = this.charCodeAt(i); 
    hash = ((hash << 5) - hash) + chr; 
    hash |= 0; // Convert to 32bit integer 
    } 
    return hash; 
}; 
+0

これは何とか大幅に私のコードを遅くする –

+0

それは明らかです。しかし、あなたが大規模なアルゴリズムのような 'SHA1'を使用する場合、どのようなケースが考えられますか? –

+0

出力として整数が必要です –

1

。私はあなたと同じ論理でそれをやった。それを見て:あなたがのために一意の番号を使用してください何

let input = "W5M"; 
let output = ''; 
for (let i = 0; i < input.length; i++) { 
    output += input[i].charCodeAt(0); 
} 

console.log(output); 

https://jsfiddle.net/3fqsvkqw/4/

1

:これはどのように

function getHash(input){ 
 
    var hash = 0, len = input.length; 
 
    for (var i = 0; i < len; i++) { 
 
    hash = ((hash << 5) - hash) + input.charCodeAt(i); 
 
    hash |= 0; // to 32bit integer 
 
    } 
 
    return hash; 
 
} 
 

 
console.log(getHash("YSM")); 
 
console.log(getHash("W8M"));

+1

'let input =" W5M ";'私の入力は 'W8N'でした@netoguimaraes –

+0

私は知っています。独自の値で実行させると、毎回異なるIDを生成することがわかります。 – netoguimaraes