[Flash开发笔记] ActionScript 生成伪 Guid

在一个Flash制作的图片上传程序中(使用了FileReference,但这玩意儿不能返回服务器数据),需要在as 中生成guid做为服务端文件的文件名,起初想使用js生成然后再传入flash,js生成方法如下:

ExpandedBlockStart.gif ContractedBlock.gif < SCRIPT      LANGUAGE ="JavaScript" > dot.gif    
InBlock.gif    
<!--
InBlock.gif    
function guid()
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif     
var  TypeLib  =  new  ActiveXObject( "Scriptlet.TypeLib" );   
InBlock.gif     strGUID
=  TypeLib.Guid;   
InBlock.gif     alert (strGUID );
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif    
//-->   
None.gif
</ SCRIPT >  
None.gif
< href ="javascript:void(0);guid()" > test </ a >

但是js生成时,浏览器会弹出ActiveX控件的交互询问,不爽,但此种方式应该是生成真正的guid。

后来想,使用as生成伪guid,应该可以,这种方法虽然理论上不是完全唯一,但是重复的几率已经很少了。
GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。例如:394ac5df-7259-2598-ccda-525D119C1b8b即为有效的 GUID 值,那么根据此规则,写出as的伪guid生成方法如下:

ExpandedBlockStart.gif ContractedBlock.gif function  createUID():String  dot.gif {
InBlock.gif        
var uid:String = "";
InBlock.gif        
var ALPHA_CHARS:String = "0123456789abcdef";
InBlock.gif        
var i:Number;
InBlock.gif        
var j:Number;
ExpandedSubBlockStart.gifContractedSubBlock.gif        
for (i=0; i<8; i++dot.gif{//先成成前8位
InBlock.gif            uid 
+= ALPHA_CHARS.charAt(Math.round(Math.random()*15));
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
for (i=0; i<3; i++dot.gif{//中间的三个4位16进制数
InBlock.gif            uid 
+= "-";
ExpandedSubBlockStart.gifContractedSubBlock.gif            
for (j=0; j<4; j++dot.gif{
InBlock.gif                uid 
+= ALPHA_CHARS.charAt(Math.round(Math.random()*15));
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

InBlock.gif        uid 
+= "-";
InBlock.gif        
var time:Number = new Date().getTime();
InBlock.gif        uid 
+= ("0000000"+time.toString(16).toUpperCase()).substr(-8);//取后边8位
ExpandedSubBlockStart.gifContractedSubBlock.gif        
for (i=0; i<4; i++dot.gif{
InBlock.gif            uid 
+= ALPHA_CHARS.charAt(Math.round(Math.random()*15));//再循环4次随机拿出4位
ExpandedSubBlockEnd.gif        }

InBlock.gif        
return uid;
ExpandedBlockEnd.gif    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值