2 バイトの最大値は 65535 であるため、2 バイトだけを使用すると 6 桁になることはありません。
代わりに 3 バイトを使用し、次を使用して 6 桁に減らしますsubstr
。
var crypto = require('crypto');
crypto.randomBytes(3, function(err, buffer) {
console.log(parseInt(buffer.toString('hex'), 16).toString().substr(0,6));
});
別の解決策はrandomBytes
、6 桁の値を取得するまで実行することです。
var crypto = require('crypto');
var secureVal = 0;
function generateSecureVal(cb) {
crypto.randomBytes(3, function(err, buffer) {
secureVal = parseInt(buffer.toString('hex'), 16);
if (secureVal > 999999 || secureVal < 100000) {
generateSecureVal(cb);
} else {
cb();
}
});
}
generateSecureVal(function(){
console.log(secureVal);
});
上記の問題は、理論的には終わりのないループに陥る可能性があり、最初の例よりもはるかに多くの CPU サイクルを使用する可能性が高いことです。