package com.controls {
import flash.display.Sprite;
import flash.system.Capabilities; public class GUID extends Sprite {
private static var counter:Number = 0; function GUID(){ } public static function create():String {
var dt:Date = new Date();
var id1:Number = dt.getTime();
var id2:Number = Math.random()*Number.MAX_VALUE;
var id3:String = Capabilities.serverString;
var rawID:String = calculate(id1+id3+id2+counter++).toUpperCase();
var finalString:String = rawID.substring(0, 8) + "-" + rawID.substring(8, 12) + "-" + rawID.substring(12, 16) + "-" + rawID.substring(16, 20) + "-" + rawID.substring(20, 32);
return finalString;
} private static function calculate(src:String):String {
return hex_sha1(src);
} private static function hex_sha1(src:String):String {
return binb2hex(core_sha1(str2binb(src), src.length*8));
} private static function core_sha1(x:Array, len:Number):Array {
x[len >> 5] |= 0x80 << (24-len%32);
x[((len+64 >> 9) << 4)+15] = len;
var w:Array = new Array(80), a:Number = 1732584193;
var b:Number = -271733879, c:Number = -1732584194;
var d:Number = 271733878, e:Number = -1009589776;
for (var i:Number = 0; i<x.length; i += 16) {
var olda:Number = a, oldb:Number = b;
var oldc:Number = c, oldd:Number = d, olde:Number = e;
for (var j:Number = 0; j<80; j++) {
if (j<16) w[j] = x[i+j];
else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
var t:Number = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)), safe_add(safe_add(e, w[j]), sha1_kt(j)));
e = d; d = c;
c = rol(b, 30);
b = a; a = t;
}
a = safe_add(a, olda);
b = safe_add(b, oldb);
c = safe_add(c, oldc);
d = safe_add(d, oldd);
e = safe_add(e, olde);
}
return new Array(a, b, c, d, e);
} private static function sha1_ft(t:Number, b:Number, c:Number, d:Number):Number {
if (t<20) return (b & c) | ((~b) & d);
if (t<40) return b ^ c ^ d;
if (t<60) return (b & c) | (b & d) | (c & d);
return b ^ c ^ d;
} private static function sha1_kt(t:Number):Number {
return (t<20) ? 1518500249 : (t<40) ? 1859775393 : (t<60) ? -1894007588 : -899497514;
} private static function safe_add(x:Number, y:Number):Number {
var lsw:Number = (x & 0xFFFF)+(y & 0xFFFF);
var msw:Number = (x >> 16)+(y >> 16)+(lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
} private static function rol(num:Number, cnt:Number):Number {
return (num << cnt) | (num >>> (32-cnt));
} private static function str2binb(str:String):Array {
var bin:Array = new Array();
var mask:Number = (1 << 8)-1;
for (var i:Number = 0; i<str.length*8; i += 8) {
bin[i >> 5] |= (str.charCodeAt(i/8) & mask) << (24-i%32);
}
return bin;
} private static function binb2hex(binarray:Array):String {
var str:String = new String("");
var tab:String = new String("0123456789abcdef");
for (var i:Number = 0; i<binarray.length*4; i++) {
str += tab.charAt((binarray[i >> 2] >> ((3-i%4)*8+4)) & 0xF) + tab.charAt((binarray[i >> 2] >> ((3-i%4)*8)) & 0xF);
}
return str;
}
}
}

用法:GUID.create();

可以创建全局唯一标识符。

[ActionScript 3.0] AS3 GUID(全局唯一标识符)的更多相关文章

  1. GUID全局唯一标识符

         全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符.GUID主要用于在拥有多个节点.多台计算机的网络或系统中. ...

  2. GUID全局唯一标识符相关知识了解

     全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符.GUID主要用于在拥有多个节点.多台计算机的网络或系统中.在理想情 ...

  3. 全局唯一标识符(GUID)

    全局唯一标识符,简称GUID(发音为/ˈɡuːɪd/或/ˈɡwɪd/),是一种由算法生成的唯一标识,通常表示成32个16进制数字(0-9,A-F)组成的字符串,如:{21EC2020-3AEA-106 ...

  4. GUID (全局唯一标识符)

         全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符.GUID主要用于在拥有多个节点.多台计算机的网络或系统中. ...

  5. Identifier:GUID (全局唯一标识符)

    ylbtech-Miscellaneos-Identifier:GUID (全局唯一标识符) A,返回顶部 1, 全局唯一标识符(GUID,Globally Unique Identifier)是一种 ...

  6. 全局唯一标识符(GUID,Globally Unique Identifier)

    全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符.GUID主要用于在拥有多个节点.多台计算机的网络或系统中.在理想情况 ...

  7. GUID(Globally Unique Identifier)全局唯一标识符

    最近有大量数据存入数据库时,因为主键为一个nvarchar类型,起初想着用int 类型,每次打开表的时候,获取最后一行的ID,然后让其++. 但发现由于字段是char类型,数据库对其进行了排序.再次插 ...

  8. JS生成全局唯一标识符(GUID,UUID)的方法

    全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) . GUID是一种由算法生成的二进制长度 ...

  9. C# 全局唯一标识符 (GUID)

    一 C#  全局唯一标识符 (GUID) Represents a globally unique identifier (GUID). To browse the .NET Framework so ...

随机推荐

  1. Js中的window.parent ,window.top,window.self ,window.openner详解

    在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口, opener是用open方法 ...

  2. asp.net系统过滤器、自定义过滤器

    原文地址:http://www.cnblogs.com/kissdodog/archive/2013/05/21/3090513.html 一.系统过滤器使用说明 1.OutputCache过滤器 O ...

  3. jQuery在IE浏览器上的html()报错 return !noData || noData !== true && elem.getAttribute("classid") === noData;

    解决方法是,将Query 1.10.2版本的源码中的3791行: return !noData || noData !== true && elem.getAttribute(&quo ...

  4. 关于web.config中customErrors

    <customErrors>节点用于定义一些自定义错误信息的信息.此节点有Mode和defaultRedirect两个属性,其中defaultRedirect属性是一个可选属性,表示应用程 ...

  5. T 恤

    https://detail.tmall.com/item.htm?spm=a220o.1000855.1998025129.1.A6Zaol&id=528088614049&pvid ...

  6. iproute-2.6.32

    iproute之tc命令翻译地址,man tc的翻译 http://blog.csdn.net/ysdaniel/article/details/7905879

  7. 【转】关于B/S架构应用程序的权限设置分析和总结

    来自:http://www.cnblogs.com/zhouxunyu/p/3790122.html 分析:不同的用户登录到系统后赋予不同的操作权限,而用户存在于数据库中,标识用户权限的字段也保存在数 ...

  8. Send an email with format which is stored in a word document

    1. Add a dll reference: Microsoft.Office.Interop.Word.dll 2. Add the following usings using Word = M ...

  9. mysql 获取一个表中缺失的最小编号

    select count(*),t1.`name` from test_id t1INNER JOIN test_id t2on t1.id >= t2.idgroup by t1.id,t1. ...

  10. LinkedHashMap和HashMap区别

    import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.uti ...