As the title says ... is it possible to create a random 16 digit number with jquery?
- 
                    5`Math.round(Math.random()*1E16)` – Chad Feb 02 '12 at 22:24
- 
                    1http://stackoverflow.com/questions/1527803/generating-random-numbers-in-javascript – mrtsherman Feb 02 '12 at 22:24
- 
                    jquery doesn't have any utilities to accomplish this, you'll have to just use plain javascript. – driangle Feb 02 '12 at 22:25
- 
                    Hello @Stach3000, I just need to tell you that the current accepted answer is not error-free, and even when taking some extreme measures it could still fail http://jsfiddle.net/KF5tD/ (refresh few times) – ajax333221 Feb 03 '12 at 19:07
8 Answers
Just use:
Math.floor(Math.random()*1E16)
EDIT :
Note that there is about a 1/10 chance of a lower number of digits. If Math.random() generates something like 0.0942104924071337 then 0.0942104924071337 * 1E16 is 0942104924071337 which evaluates to 942104924071337; a 15 digit number.
The only way to 100% guarantee that the number is 16 digits in length is to have it be formed as a string. Using this method I would recommend @rjmunro's answer:
number = (Math.random()+' ').substring(2,10)+(Math.random()+' ').substring(2,10);
 
    
    - 19,219
- 4
- 50
- 73
- 
                    
- 
                    Its the abbreviated form of scientific notation. so `1E16 == 1*(10^16)`. You can see more info [here](http://en.wikipedia.org/wiki/Scientific_notation#E_notation) – Chad Feb 03 '12 at 01:20
- 
                    I believe you didn't meant to use `Math.floor` since that would generate numbers from `0-15` – ajax333221 Feb 03 '12 at 01:40
- 
                    @ajax333221 The `Math.floor()` is just there to truncate the decimal place that is left after creating a 16 digit mantissa with `Math.random()*1E16`. This will *not* generate a number from `0 - 15` – Chad Feb 03 '12 at 15:39
- 
                    I see, My mistake was to replace the `1E16` for `16` (which obviously isn't correct). Sorry for wasting your time. – ajax333221 Feb 03 '12 at 18:05
- 
                    I would just have removed my upvote, but It was locked. I just think that answers that don't work properly shouldn't deserve to be upvoted by me. If somehow I see the way to remove it, I will. Don't take it personally. – ajax333221 Feb 04 '12 at 00:36
Not with jQuery, no, but you can do it with plain javascript.
If you want exactly 16 digits (possibly including leading 0s), I would start with Math.random(), convert to a string, pick 8 digits, and concatenate 2 runs together.
number = (Math.random() + '').substring(2,10)
  + (Math.random() + '').substring(2,10);
 
    
    - 27,203
- 20
- 110
- 132
I just tried with @rjmunro 's answer.
Unfortunately, it does generate string less than 16digits,
but very rare, approxly once in 10 million times.
Here is my testing code, runs in nodejs:
'use strict';
var fs = require('fs');
var totalTimes = 100000000;
var times = totalTimes;
var fileName;
var writeStream;
while (times > 0) {
  var key = (Math.random() + ' ').substring(2,10) + (Math.random() + ' ').substring(2,10);
  times --;
  if (key.length !== 16) {
    var msg = 'a flaw key gened: ' + key + '\n';
    // create a log file at first time
    if (!fileName) {
      fileName = 'log/flaw_key_' + new Date() + '.txt';
    }
    writeStream = fs.createWriteStream(fileName);
    writeStream.write(msg);
    writeStream.end();
  }
  if (times === 0) {
    console.log(totalTimes + ' times key gened');
  }
}
Also @Dimitri Mikadze 's answer generate less length string as well, so I eventually adopt a way with some concept of his solution:
function getRandomInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}
/**
 * Gen random digits string in specific length
 * @param {Int} length of string
 *
 * @return {String}
 *
 */
function genString(length) {
  var times = length;
  var key = '';
  while (times > 0) {
    times --;
    key += getRandomInt(0, 9);
  }
  return key;
}
genString(16); // a 16 digits string
 
    
    - 88
- 7
This is a task which is much better suited for raw javascript. For example
var str = '';
var i;
for (i = 0; i < 16; i++) {
  var number = Math.floor(Math.random() * 10) % 10;
  str += number;
}
 
    
    - 733,204
- 149
- 1,241
- 1,454
- 
                    It's not just "better suited to raw javascript", it has nothing to do with jQuery whatsoever. It's like saying "How can I make apple pie using only oranges?" – rjmunro Feb 03 '12 at 23:54
u can use this function to generate random digits, just pass minimum and maximum parameters
function randomInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1) + min);
}
random 16 digit, usage
randomInt(0, 9999999999999999);
 
    
    - 474
- 5
- 10
I know this question is old but this simple function will guarantee a 16 (or however many you want) character string every time without the 10% failure rate of other solutions. Can change it to a number if you need to.
function generate() {
        let string = ""
    
        while (string.length < 16) {
            let number = Math.floor(Math.random() * 10).toString()
            string += number
        }
        return string
    }
 
    
    - 16
- 2
I think this way is more beautiful:
const generateFixedLengthNumberInString = length =>
  [...Array(length).keys()].reduce(
    previousValue =>
      previousValue + String(Math.floor(Math.random() * 10) % 10),
  );
console.log(generateFixedLengthNumberInString(16))
// prints "0587139224228340"
 
    
    - 302
- 1
- 10
 
    