Rumah > Soal Jawab > teks badan
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?
P粉3121957002023-10-13 12:38:49
Saya baru mendapati ini adalah penyelesaian yang sangat bagus dan elegan:
Math.random().toString(36).slice(2)
Nota mengenai pelaksanaan ini:
Math.random()
, output mungkin boleh diramal dan oleh itu tidak semestinya unik. P粉9856865572023-10-13 09:56:40
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');
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:
function randomString(length, chars) { var mask = ''; if (chars.indexOf('a') > -1) mask += 'abcdefghijklmnopqrstuvwxyz'; if (chars.indexOf('A') > -1) mask += 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; if (chars.indexOf('#') > -1) mask += '0123456789'; if (chars.indexOf('!') > -1) mask += '~`!@#$%^&*()_+-={}[]:";\'<>?,./|\'; var result = ''; for (var i = length; i > 0; --i) result += mask[Math.floor(Math.random() * mask.length)]; return result; } console.log(randomString(16, 'aA')); console.log(randomString(32, '#aA')); console.log(randomString(64, '#A!'));
Fiddle: http://jsfiddle.net/wSQBx/2/
Sebagai alternatif, untuk menggunakan kaedah base36 seperti yang diterangkan di bawah, anda boleh melakukan perkara berikut:
function randomString(length) { return Math.round((Math.pow(36, length + 1) - Math.random() * Math.pow(36, length))).toString(36).slice(1); }