Bagaimana untuk menjana rentetan alfanumerik rawak dalam JavaScript?
P粉7757887232023-10-12 23:03:12
0
2
746
Apakah cara terpendek (dalam sebab) untuk menjana rentetan abjad angka rawak (huruf besar, huruf kecil dan angka) untuk digunakan sebagai pengecam unik yang mungkin dalam JavaScript?
Saya baru mendapati ini adalah penyelesaian yang sangat bagus dan elegan:
Math.random().toString(36).slice(2)
Nota mengenai pelaksanaan ini:
Ini akan menghasilkan rentetan antara 0 dan 12 aksara panjang, biasanya 11 aksara memandangkan rentetan titik terapung mengalihkan sifar mengekor.
Ia tidak menjana huruf besar, hanya huruf kecil dan nombor.
Memandangkan rawak datang dari Math.random(), output mungkin boleh diramal dan oleh itu tidak semestinya unik.
Walaupun menganggap pelaksanaan yang ideal, output akan mempunyai paling banyak 52 bit entropi, yang bermaksud anda mungkin mendapat pendua selepas menjana ~70M rentetan.
Jika anda hanya mahu membenarkan aksara tertentu, anda juga boleh melakukan ini:
function randomString(length, chars) {
var result = '';
for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
return result;
}
var rString = randomString(32, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
Saya baru mendapati ini adalah penyelesaian yang sangat bagus dan elegan:
Nota mengenai pelaksanaan ini:
Math.random()
, output mungkin boleh diramal dan oleh itu tidak semestinya unik.Jika anda hanya mahu membenarkan aksara tertentu, anda juga boleh melakukan ini:
Berikut ialah jsfiddle untuk ditunjukkan: http://jsfiddle.net/wSQBx/
Pendekatan lain ialah menggunakan rentetan khas untuk memberitahu fungsi jenis aksara yang hendak digunakan. Anda boleh melakukan ini:
Fiddle: http://jsfiddle.net/wSQBx/2/
Sebagai alternatif, untuk menggunakan kaedah base36 seperti yang diterangkan di bawah, anda boleh melakukan perkara berikut: