77家的会客2010

ColdFusion中UUID与GUID的区别与转换
Weather:雷阵雨 ,南风 4-5级 ,最高气温27 ℃

  什么是GUID,这个概念如果你还不知道,那么建议你去Google一下,不过我可以告诉你是一个全球无二的36位长的字符串,而对应的,ColdFusion里面有个CreateUUID函数,是生成的35位的一个也是全球无二的字符串,只是比36位少了一条短线“-”。

  因此,如果是在ColdFusion里面使用的话,一般相应的数据库字段设置为char(35)定长就可以了,然后像我这样从ASP转向ColdFusion的人就存在这样一个问题,我以前用asp的生成的GUID是36位的,怎么办?我们只好把少的那一位补回来。

  ColdFusion生成的UUID格式如:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx,是一种“8-4-4-16”共计35位,而ASP生成的则是:{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} e,去掉前后的多余的{}以及一个空格和e,中间的有效格式为 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,是一种“8-4-4-4-12”共计36位的标准格式。

  要实现UUID向GUID的转换,在ColdFusion里面只需要这样一个简单的设置

<cfset ID = insert("-", CreateUUID(), 23)>

  或是也可以写成一个函数

<cffunction name="CreateSQLID" access="public" returntype="GUID" output="no">
<cfreturn insert("-", CreateUUID(), 23)>
</cffunction>

  那么,在ColdFusion里面我们又如何验证转换完了的或是传值过来的字符串到底是不是一个GUID标准呢?用下面的这个正则函数:

<cffunction name="IsSQLID" access="public" returntype="boolean" output="no">
<cfargument name="uuid" required="Yes" default="" type="string" hint="A GUID value to be checked.">
<cfreturn REFindNoCase("^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}",uuid)>
</cffunction>

  另外,使用ASP中的GUID还存在点问题,就是如果直接用ASP的组件(当然得服务器支持)生成的GUID是如我前面所说的那样,会多出{}以及一个空格和e,不经过处理的话,是没办法直接用的,直接用在sql语句里面,会因为“} e”而导致一个截断;因此,如果你想在ASP中使用GUID,用下面我提供的这个函数,就可以正常使用了。

 '生成GUID
function CreateGUID()
Dim objTypeLib
Set objTypeLib = CreateObject("Scriptlet.TypeLib")
if err<>0 then
oScript("alert('服务器限制,无法生成GUID');history.back()")
err = 0
set objTypeLib = nothing
response.end
end if
CreateGUID = Mid(objTypeLib.Guid,2,36)
set objTypeLib = nothing
end function

历史上的今天: [2011/08/10]AS400安全相关命令
[2004/08/10]一份代码编写标准[ZT]

[ColdFusion中UUID与GUID的区别与转换]的回复

Post a Comment~