Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript为发票编号每次生成唯一编号_Javascript - Fatal编程技术网

如何使用javascript为发票编号每次生成唯一编号

如何使用javascript为发票编号每次生成唯一编号,javascript,Javascript,尝试使用javascript为发票编号生成从1000到500000的唯一编号。因此,我可以选择带有时间和随机编号的今天日期。这是正确的方法吗?怎么做? 发票编号长度应为4到6 var d = new Date(); var t = new Date().getTime(); var randomnum = Math.floor(Math.random() * (1000 - 500000)) + 1000; randomnum = d.getFullYear() + f(d.getMonth

尝试使用javascript为发票编号生成从1000到500000的唯一编号。因此,我可以选择带有时间和随机编号的今天日期。这是正确的方法吗?怎么做? 发票编号长度应为4到6

var d = new Date(); 
var t = new Date().getTime();
var randomnum = Math.floor(Math.random() * (1000 -  500000)) + 1000;
randomnum = d.getFullYear() + f(d.getMonth()+1) + f(d.getDate()) + randomnum; 
randomnum = randomnum + t;
console.log(randomnum);

或者完全跳过数字,除非您需要易读的人类格式(当您生成非连续数字时,它不会出现)。我建议改为使用GUID

它可以这样使用:

import v4 from "uuid/v4";
const id = v4();

GUI在2.7e18代之后有50%的冲突风险。

您可以使用下面的函数生成
字符串
ID。但我不喜欢它。您应该使用从1到500000的整数增量

/**
 * 
 * @param {number} min 
 * @param {number} max 
 * 
 * @returns {string}
 */
const getRandomId = (min = 0, max = 500000) => {
  min = Math.ceil(min);
  max = Math.floor(max);
  const num =  Math.floor(Math.random() * (max - min + 1)) + min;
  return num.toString().padStart(6, "0")
};

console.log(getRandomId()); // 350845, 000845 

/**
 * 
 * @param {number} min 
 * @param {number} max 
 * 
 * @returns {number}
 */
const getRandomId = (min = 1000, max = 500000) => {
  min = Math.ceil(min);
  max = Math.floor(max);
  const num =  Math.floor(Math.random() * (max - min + 1)) + min;
  return num;
};

console.log(getRandomId()); // 2151, 464128
下面的这个函数可以用来生成从1到500000的id。就像MySQL中的int增量一样。但当数字为1时,此函数将其转换为字符串000001

/**
 * 
 * @param {number} num 
 * 
 * @returns {string}
 */
const getId = (num) => {
  return num.toString().padStart(6, "0")
};

console.log(getId(1)); // 000001

这就是你问题的答案。如何生成从1000到500000的唯一数字

/**
 * 
 * @param {number} min 
 * @param {number} max 
 * 
 * @returns {string}
 */
const getRandomId = (min = 0, max = 500000) => {
  min = Math.ceil(min);
  max = Math.floor(max);
  const num =  Math.floor(Math.random() * (max - min + 1)) + min;
  return num.toString().padStart(6, "0")
};

console.log(getRandomId()); // 350845, 000845 

/**
 * 
 * @param {number} min 
 * @param {number} max 
 * 
 * @returns {number}
 */
const getRandomId = (min = 1000, max = 500000) => {
  min = Math.ceil(min);
  max = Math.floor(max);
  const num =  Math.floor(Math.random() * (max - min + 1)) + min;
  return num;
};

console.log(getRandomId()); // 2151, 464128

使用date day和random可能不够抗碰撞。碰撞的可能性太大。您将需要使用递增的id。尽管我怀疑如果您不跟踪id以防止冲突,4到6位数字可能不足以使用。uuid生成符合RFC 4122的内容,如果您想要符合标准和值得信赖的内容。@user120242:创建发票号唯一的最佳方法是什么?最好的方法是简单地递增,如他所说:1000、1001、1002、1003等。无需随机化发票号。它们对隐私不敏感,这只会让你的管理工作变得更加复杂。@icecub:如何增加唯一的数字?@icecub:我是在问随机数字应该是有序的和唯一的,比如100010011002等……如何使用uuid增加唯一的数字?