生成随机6个字符的小写字符串

时间:2014-08-25 08:53:01

标签: javascript

我已经看到很多类似的问题,但没有一个具有完全相同的标准。

我想生成一个由6个字符组成的短字符串,仅由小写字母和数字组成(理想情况下没有字母' o'和数字0)。

该字符串必须是唯一的,因为它将用作URL的一部分。我一直在使用以下内容,但每次生成时字符串都相似,我希望它们看起来非常不同。

(+new Date()).toString(36); //actually creates 8 letter string and includes o & 0

示例:查看JS小提琴并单击"保存" - 使用随机,唯一,非顺序ID更新网址。 (在这种情况下为8个字符)

有什么建议吗?

5 个答案:

答案 0 :(得分:2)

我使用这种结构生成随机字符串:

Math.random().toString(36).slice(2);

如果使用slice(0, 6)进行改进,您将获得6个字符的随机字符串:

Math.random().toString(36).slice(2).slice(0, 6);
Math.random().toString(36).slice(2, 8);

但是你不能生成随机字符串并确保这是唯一的。总是有可能生成的字符串不是唯一的,所以这是不好的做法。

UPD:如果您想使用Date,当然可以:

Date.now().toString(36).slice(0, 6);

有了这个变种,我无法保证这是唯一的。

如果你想删除0O,那么你可以像这样使用smth:

Date.now().toString(36).slice(0, 6).replace(/[o,O,0]+/g, '-');

我在这里用破折号替换小写字母o,大写O和数字0。你可以使用你想要的东西。

UPD:如果您想要唯一值,那么您不需要切片字符串:

Date.now().toString(36).replace(/[o,O,0]+/g, '-');

答案 1 :(得分:0)

使用此代码:

var chars = [
  "0","1","2","3","4","5","6","7","8","9",
  "a","b","c","d","e","f","g","h","i","j",
  "k","l","m","n","o","p","q","r","s","t",
  "u","v","w","x","y","z"
];

function get6RandomChars() {
  var char1 = chars[Math.floor(Math.random()*36)];
  var char2 = chars[Math.floor(Math.random()*36)];
  var char3 = chars[Math.floor(Math.random()*36)];
  var char4 = chars[Math.floor(Math.random()*36)];
  var char5 = chars[Math.floor(Math.random()*36)];
  var char6 = chars[Math.floor(Math.random()*36)];

  return ""+char1+char2+char3+char4+char5+char6;
}

alert(get6RandomChars());

参见jsfiddle:http://jsfiddle.net/jondinham/aLthx08g/

答案 2 :(得分:0)

使用一个小数字并从右边拉:

 (Math.random()/9e9).toString(36).slice(-6)

这使你获得不同价值的机会比从左边拉出的机会更大。

如果你需要避免欺骗,你必须记住。数据库很好,但从概念上讲:

function rnd(){
  var r=(Math.random()/9e9).toString(36).slice(-6);
  return rnd[r] ? rnd() : ((rnd[r]=1) && r);
}

答案 3 :(得分:0)

您也可以尝试:

new Date().getTime().toString(36).replace(/0,o,O/g,'').slice(-6)

答案 4 :(得分:0)

尝试以下操作:

////
/// @author Nikhil Saini
/// @desc Random string generator function
/// @example var key = randomString("1-a-A-$-#-*"); gives key = 6-y-Z-<-r-@
/// @invocation randomString(pattern);
/// @param pattern: A string with random character identifiers
/// @default random identifiers:-
///     1: numerical digit,
///     a: lowercase alphabet
///     A: uppercase alphabet
///     #: alphanumeric character
///     $: special character
///     *: wildcard
///     !: lowercase alphanumeric
/// @notes:
///     1. Characters that are not acting as identifiers will be preserved
///     2. Character sets can be customised/added by setting randomStringTable.<character-identifier> to desirable string of possible characters
////

///dictionary for possible characters
var randomStringTable = {
  "1": "1234567890",
  "a": "qwertyuiopasdfghjklzxcvbnm",
  "A": "QWERTYUIOPASDFGHJKLZXCVBNM",
  "$": "~!@#$%^&*()_+`{}:\"<>?|\\[];',./-=",
  "#": "1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM",
  "!": "1234567890qwertyuiopasdfghjklzxcvbnm",
  "*": "1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM~!@#$%^&*()_+`{}:\"<>?|\\[];',./-="
};

/// function for random string generation
var randomString = pattern => {
  var randomString = "";
  for (var i = 0; i < pattern.length; i++) {
    var possibility = randomStringTable[pattern[i]];
    randomString += possibility ?
      possibility.charAt(Math.floor(Math.random() * possibility.length)) :
      pattern[i];
  }
  return randomString;
};

console.log(randomString("aaaaaa"));
console.log(randomString("######"));
console.log(randomString("!!!!!!"));