阅读:1846回复:1
Mapbar坐标的加密与解密算法
<P><FONT face=Verdana><script language="javascript"></FONT></P>
<P><FONT face=Verdana> var EncodeKey = 699;<BR> //加密密钥,数值型;可以每个客户都不一样<BR> <BR> function Decode(encodedcoord)<BR> //解密坐标<BR> {<BR> var MaxNumPos=-1;<BR> //最大数位的位置<BR> var MaxNum=0;<BR> //最大数<BR> var Org='';<BR> //出除修改后的原始值<BR> for(var i=0;i<encodedcoord.length;i++)<BR> {<BR> var Tmp=parseInt(encodedcoord.charAt(i),36)-10;<BR> if(Tmp>=10)<BR> Tmp=Tmp-7;<BR> Org+=(Tmp).toString(36);<BR> if(Tmp>MaxNum)<BR> {<BR> MaxNumPos=i;<BR> MaxNum=Tmp<BR> }<BR> //获取最大数及其位置<BR> } <BR> var Diff=parseInt(Org.substring(0,MaxNumPos),16);<BR> //纬度-经度<BR> var Sum=parseInt(Org.substring(MaxNumPos+1),16);<BR> //纬度+经度<BR> var Coord=new Array();<BR> //坐标<BR> Coord[0]=(Diff+Sum-parseInt(EncodeKey))/2; <BR> //纬度<BR> Coord[1]=(Sum-Coord[0])/100000.0;<BR> //经度<BR> Coord[0]/=100000.0;<BR> return Coord<BR> };<BR> //解密坐标的实例<BR> document.write('这是IJSVSDZVJACRV解密后的值:<br>'+Decode('IJSVSDZVJACRV')+'<br><br>');<BR> <BR> //加密坐标<BR> function Encode(Lat,Lng)<BR> {<BR> var BLat=parseInt(parseFloat(Lat)*100000); <BR> // 纬度<BR> var BLng=parseInt(parseFloat(Lng)*100000);<BR> // 经度<BR> var Diff=(BLng-BLat+parseInt(EncodeKey)).toString(16); //之差<BR> var Sum=(BLng+BLat).toString(16); //之和<BR> var EncodedCoord=''; //编码后的坐标<BR> for(var i=0;i<Diff.length;i++)<BR> {<BR> var TmpInt=parseInt(Diff.charAt(i),16);<BR> EncodedCoord+=(((TmpInt>=10)?(TmpInt+7):TmpInt)+10).toString(36)<BR> }<BR> //对差进行36位编码,大于10的+7,再全部加10<BR> EncodedCoord+='z';<BR> //加上分隔符<BR> for(var i=0;i<Sum.length;i++)<BR> {<BR> var TmpInt=parseInt(Sum.charAt(i),16);<BR> EncodedCoord+=(((TmpInt>=10)?(TmpInt+7):TmpInt)+10).toString(36)<BR> }<BR> //对和进行36位编码<BR> return EncodedCoord.toUpperCase()<BR> }<BR> //加密实例<BR> document.write('这是31.2336597442627,121.472076416016加密后的值:<br>'+Encode('31.2336597442627','121.472076416016')); <BR></script></FONT></P> |
|
|
1楼#
发布于:2008-08-01 13:12
<P>好</P>
|
|