GUID(Globally Unified Identifier)는 동일한 시간과 공간에서 모든 머신에 고유성이 보장되는 머신에서 생성되는 번호를 의미합니다. 일반적으로 플랫폼은 GUID를 생성하는 API를 제공합니다. 생성 알고리즘은 이더넷 카드 주소, 나노초 시간, 칩 ID 및 가능한 많은 숫자를 사용하여 흥미롭습니다. GUID의 유일한 단점은 결과 문자열이 상대적으로 크다는 것입니다.
GUID 형식은 다음과 같습니다: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
프런트엔드 개발에서는 GUID가 그다지 유용하지 않다는 것은 누구나 알고 있지만, ID를 삽입해야 하고 이 ID가 GUID가 필요한 백엔드 및 기타 작업에 해당하는 경우 편의를 위해 GUID를 생성할 수 있습니다.
일반적으로 sql, java, C# 등의 백엔드나 데이터베이스 언어로 GUID를 생성하는 것은 매우 간단합니다. 그러나 프런트엔드에서 GUID를 직접 생성할 수 있는 방법이 없으므로 하나만 작성하면 됩니다. 스스로. 하지만 GUID는 이더넷 카드의 주소와 나노초 수준의 시간 및 기타 숫자를 얻어야 하기 때문입니다. 프런트 엔드에서는 이 정보를 얻기가 어렵지만(아는 경우 알려주세요) GUID를 시뮬레이션하고 생성할 수 있습니다. 코드는 다음과 같습니다.
/* * 功能:生成一个GUID码,其中GUID以14个以下的日期时间及18个以上的16进制随机数组成,GUID存在一定的重复概率,但重复概率极低,理论上重复概率为每10ms有1/(16^18),即16的18次方分之1,重复概率低至可忽略不计 * 免责声明:此代码为作者学习专用,如在使用者在使用过程中因代码问题造成的损失,与作者没有任何关系 * 日期:2014年9月4日 * 作者:wyc */ function GUID() { this.date = new Date(); /* 判断是否初始化过,如果初始化过以下代码,则以下代码将不再执行,实际中只执行一次 */ if (typeof this.newGUID != 'function') { /* 生成GUID码 */ GUID.prototype.newGUID = function() { this.date = new Date(); var guidStr = ''; sexadecimalDate = this.hexadecimal(this.getGUIDDate(), 16); sexadecimalTime = this.hexadecimal(this.getGUIDTime(), 16); for (var i = 0; i < 9; i++) { guidStr += Math.floor(Math.random()*16).toString(16); } guidStr += sexadecimalDate; guidStr += sexadecimalTime; while(guidStr.length < 32) { guidStr += Math.floor(Math.random()*16).toString(16); } return this.formatGUID(guidStr); } /* * 功能:获取当前日期的GUID格式,即8位数的日期:19700101 * 返回值:返回GUID日期格式的字条串 */ GUID.prototype.getGUIDDate = function() { return this.date.getFullYear() + this.addZero(this.date.getMonth() + 1) + this.addZero(this.date.getDay()); } /* * 功能:获取当前时间的GUID格式,即8位数的时间,包括毫秒,毫秒为2位数:12300933 * 返回值:返回GUID日期格式的字条串 */ GUID.prototype.getGUIDTime = function() { return this.addZero(this.date.getHours()) + this.addZero(this.date.getMinutes()) + this.addZero(this.date.getSeconds()) + this.addZero( parseInt(this.date.getMilliseconds() / 10 )); } /* * 功能: 为一位数的正整数前面添加0,如果是可以转成非NaN数字的字符串也可以实现 * 参数: 参数表示准备再前面添加0的数字或可以转换成数字的字符串 * 返回值: 如果符合条件,返回添加0后的字条串类型,否则返回自身的字符串 */ GUID.prototype.addZero = function(num) { if (Number(num).toString() != 'NaN' && num >= 0 && num < 10) { return '0' + Math.floor(num); } else { return num.toString(); } } /* * 功能:将y进制的数值,转换为x进制的数值 * 参数:第1个参数表示欲转换的数值;第2个参数表示欲转换的进制;第3个参数可选,表示当前的进制数,如不写则为10 * 返回值:返回转换后的字符串 */ GUID.prototype.hexadecimal = function(num, x, y) { if (y != undefined) { return parseInt(num.toString(), y).toString(x); } else { return parseInt(num.toString()).toString(x); } } /* * 功能:格式化32位的字符串为GUID模式的字符串 * 参数:第1个参数表示32位的字符串 * 返回值:标准GUID格式的字符串 */ GUID.prototype.formatGUID = function(guidStr) { var str1 = guidStr.slice(0, 8) + '-', str2 = guidStr.slice(8, 12) + '-', str3 = guidStr.slice(12, 16) + '-', str4 = guidStr.slice(16, 20) + '-', str5 = guidStr.slice(20); return str1 + str2 + str3 + str4 + str5; } } }
GUID 개체
JS 파일로 저장해서 참고하시면 됩니다.
그렇다면 그래야만 합니다.
경고(guid.newGUID())
구현 원리는 매우 간단합니다. 여기서는 시스템 시간과 18개 이상의 16진수 난수를 사용하고 시스템 시간을 16진수로 변환하는 것은 여전히 가능하지만 반복 가능성은 매우 낮습니다. 무시할 수 있습니다.
위 방법은 제가 GUID를 생성하기 위해 작성한 것입니다. 더 좋은 방법이 있으면 알려주세요. 감사합니다!