TomC Posted June 10, 2009 Share Posted June 10, 2009 With a bit of help from this forum, I now have a JS generating a random string of characters, of varying length. However, I now realise that for my puposes, I dont want to duplicate any characters within the string, ie I want all characteres to be different.I realise that avoiding duplicating the entire string is an"old chestnut" but is there any way to solve my problem? I think I can see a method using a number of if / else statements, by creating single characters and reexecuting in the event of duplication, but this would be truly horrible.The script I'm using is:function randomString() { var chars = "ABCDEFGHIJKLMNOPQRSTUVWXTZ"; var string_length = 1; var randomstring = ''; for (var i=0; i<string_length; i++) { var rnum = Math.floor(Math.random() * chars.length); randomstring += chars.substring(rnum,rnum+1); } return randomstring;}Grateful for any tips, Link to comment Share on other sites More sharing options...
aalbetski Posted June 10, 2009 Share Posted June 10, 2009 here's my crude effort <script> var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var randomstring = ''; var maxLength = 12; // generate array of random numbers without dups up to the maxLength var i = 0; var ranNums = new Array(); var exists = new Boolean(); while (i < maxLength) { exists = false; rnum = Math.floor(Math.random() * chars.length); for (j=0;j<ranNums.length;j++) { if (ranNums[j] == rnum) { exists = true; break; } } if (exists == false) { ranNums[i] = rnum; i++; } } for (j=0;j<maxLength;j++) { randomstring += chars.substr(ranNums[j],1); } document.write(randomstring);</script> Note that your original chars string has two 'T's. Drove me crazy Link to comment Share on other sites More sharing options...
justsomeguy Posted June 10, 2009 Share Posted June 10, 2009 Here's another version: function randomString() { var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var string_length = 8; var randomstring = ''; var rnum, ch; while (randomstring.length < string_length) { rnum = Math.floor(Math.random() * chars.length); ch = chars.substring(rnum,rnum+1); if (randomstring.indexOf(ch) == -1) randomstring += ch; } return randomstring;} Link to comment Share on other sites More sharing options...
jesh Posted June 10, 2009 Share Posted June 10, 2009 The only thing I'd add to both of the examples provided is if the maxLength (or string_length) is variable (e.g. subject to user input) to run a check to make sure that your max length is less than or equal to the length of the chars string. If the chars string was 26 characters long and maxLength was set to 27, you'd get yourself in an infinite loop. Link to comment Share on other sites More sharing options...
TomC Posted June 13, 2009 Author Share Posted June 13, 2009 Hi All - sorry for slow response.aalbetski - your script a while lot less crude then my effort. And sorry about the two T's in the original list! I had been mucking about with it and left extra char in.justsomeguy - thanks, this looks neat and works well, though to be honest i cant figure out how it works!jesh - good point. In fact I will be end user, but makes sense to ensure char list is > string lengththanks all Link to comment Share on other sites More sharing options...
dsonesuk Posted June 13, 2009 Share Posted June 13, 2009 for the "varying length of characters" change justsomeguys code:from: var string_length = 8;to: var string_length =Math.ceil(Math.random() * chars.length);this will generate value from 1 to 26or to var string_length = Math.floor((26-7)*Math.random()) + 8;this will generate value from 8 to 26(7= value = 1 less than lowest value(8)) Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.