> 웹 프론트엔드 > JS 튜토리얼 > 네이티브 JavaScript_javascript 기술을 사용하여 GUID 생성 구현 예

네이티브 JavaScript_javascript 기술을 사용하여 GUID 생성 구현 예

WBOY
풀어 주다: 2016-05-16 16:37:02
원래의
1524명이 탐색했습니다.

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가 14개 미만의 날짜 및 시간과 18개 이상의 16진수 난수로 구성된 GUID 코드를 생성합니다. GUID는 특정 반복 확률이 있지만 이론적으로 반복 확률은 매우 낮습니다. 확률은 10ms마다 1/(16^18), 즉 1/(16의 18승)이므로 반복 확률은 무시할 수 있을 정도로 낮습니다*/

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 파일로 저장해서 참고하시면 됩니다.

그렇다면

 var guid = 새 GUID();

경고(guid.newGUID())

GUID 코드를 받으실 수 있습니다.

구현 원리는 매우 간단합니다. 여기서는 시스템 시간과 18개 이상의 16진수 난수를 사용하고, 시스템 시간을 사용하여 16진수로 변환하는 것은 여전히 ​​가능하지만 반복 가능성은 매우 낮습니다. . , 무시할 수 있습니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿