FastOS
API
首页
教程
API
相关下载
社区
在线调试工具
接口规范
云主机服务
云虚拟主机
云数据库
企业邮局
相关代码
消息推送
其它服务
端口转发
### 1、内网IP生成算法,SQL版 ```SQL --创建split表值函数 create function [dbo].[F_SQLSERVER_SPLIT](@Long_str NVARCHAR(MAX),@split_str NVARCHAR(100)) RETURNS @tmp TABLE( ID inT IDENTITY PRIMARY KEY, short_str NVARCHAR(MAX) ) AS BEGIN DECLARE @long_str_Tmp varchar(8000),@short_str varchar(8000),@split_str_length int SET @split_str_length = LEN(@split_str) IF CHARINDEX(@split_str,@Long_str)=1 SET @long_str_Tmp=SUBSTRING(@Long_str,@split_str_length+1,LEN(@Long_str)-@split_str_length) ELSE SET @long_str_Tmp=@Long_str IF CHARINDEX(REVERSE(@split_str),REVERSE(@long_str_Tmp))>1 SET @long_str_Tmp=@long_str_Tmp+@split_str ELSE SET @long_str_Tmp=@long_str_Tmp IF CHARINDEX(@split_str,@long_str_Tmp)=0 Insert INTO @tmp select @long_str_Tmp ELSE BEGIN WHILE CHARINDEX(@split_str,@long_str_Tmp)>0 BEGIN SET @short_str=SUBSTRING(@long_str_Tmp,1,CHARINDEX(@split_str,@long_str_Tmp)-1) DECLARE @long_str_Tmp_LEN INT,@split_str_Position_END int SET @long_str_Tmp_LEN = LEN(@long_str_Tmp) SET @split_str_Position_END = LEN(@short_str)+@split_str_length SET @long_str_Tmp=REVERSE(SUBSTRING(REVERSE(@long_str_Tmp),1,@long_str_Tmp_LEN-@split_str_Position_END)) IF @short_str<>'' Insert INTO @tmp select @short_str END END RETURN END ------------------------------------------------------ --算法开始 --订单详细Id declare @OrderDetailId int --此处设置为1,自行替换 set @OrderDetailId=1 --最终结果,内网IP declare @IntranetIP nvarchar(100) --起始IP declare @IPSegment nvarchar(50) set @IPSegment='10.0.0.0' --IP长度,此处固定 declare @PrefixLength int set @PrefixLength=8 --将@IPSegment转为数字 declare @IPInt bigint set @IPInt=0 SELECT @IPInt = @IPInt+LEFT(@IPSegment, CHARINDEX('.', @IPSegment+'.')-1)*ID, @IPSegment = STUFF(@IPSegment, 1, CHARINDEX('.', @IPSegment+'.'), '') FROM ( SELECT ID = CAST(16777216 AS BIGINT) UNION ALL SELECT 65536 UNION ALL SELECT 256 UNION ALL SELECT 1 )A --由于第一个IP:10.0.0.1已被占用,因此要+1 set @IPInt=@IPInt+1 --加上订单Id set @IPInt=@IPInt+@OrderDetailId --将数字转为IP declare @NewIP nvarchar(50) set @NewIP=CAST(@IPInt / 0x1000000 AS nvarchar(3)) + '.' + CAST(@IPInt / 0x10000 % 0x100 AS nvarchar(3)) + '.' + CAST(@IPInt / 0x100 % 0x100 AS nvarchar(3)) + '.' + CAST(@IPInt % 0x100 AS nvarchar(3)) --IP编号转换 declare @ips1 nvarchar(10) declare @NewIP1 nvarchar(10) select @ips1=short_str from f_sqlserver_split(@IPSegment,'.') where id=1 select @NewIP1=short_str from f_sqlserver_split(@NewIP,'.') where id=1 declare @ips2 nvarchar(10) declare @NewIP2 nvarchar(10) select @ips2=short_str from f_sqlserver_split(@IPSegment,'.') where id=2 select @NewIP2=short_str from f_sqlserver_split(@NewIP,'.') where id=2 declare @ips3 nvarchar(10) declare @NewIP3 nvarchar(10) select @ips3=short_str from f_sqlserver_split(@IPSegment,'.') where id=3 select @NewIP3=short_str from f_sqlserver_split(@NewIP,'.') where id=3 declare @ips4 nvarchar(10) declare @NewIP4 nvarchar(10) select @ips4=short_str from f_sqlserver_split(@IPSegment,'.') where id=4 select @NewIP4=short_str from f_sqlserver_split(@NewIP,'.') where id=4 declare @IPHead nvarchar(50) declare @NewIPHead nvarchar(50) if(@PrefixLength=24) begin set @IPHead=@ips1+'.'+@ips2+'.'+@ips3 set @NewIPHead=@NewIP1+'.'+@NewIP2+'.'+@NewIP3 if(@IPHead<>@NewIPHead) begin set @IntranetIP=''--超出IP数量 end end if(@PrefixLength=16) begin set @IPHead=@ips1+'.'+@ips2 set @NewIPHead=@NewIP1+'.'+@NewIP2 if(@IPHead<>@NewIPHead) begin set @IntranetIP=''--超出IP数量 end end if(@PrefixLength=8) begin set @IPHead=@ips1 set @NewIPHead=@NewIP1 if(@IPHead<>@NewIPHead) begin set @IntranetIP=''--超出IP数量 end end set @IntranetIP=@NewIP --打印最终结果 print @IntranetIP ``` ### 2、MACAddress算法,SQL版 ```sql --创建向左填充字符标量函数 Create FUNCTION [dbo].[PadLeft] ( @VarOrgan varchar(10),/*原始字符*/ @TotalLength int,/*总长度*/ @Placeholder varchar(1)/*占位符*/ ) RETURNS varchar(100) AS BEGIN declare @VarNew varchar(100), @PadLen int SET @VarNew=@VarOrgan SET @PadLen=@TotalLength-LEN(@VarOrgan) while(@PadLen>0) begin select @VarNew=@Placeholder+@VarNew set @PadLen=@PadLen-1 end return @VarNew END --创建将二进制转为16进制标量函数 Create FUNCTION [dbo].[Binary2HexStr](@bin VARBINARY(8000)) RETURNS VARCHAR(8000) AS BEGIN DECLARE @re VARCHAR(8000),@i INT SELECT @re='',@i=datalength(@bin) WHILE @i>0 SELECT @re=substring('0123456789ABCDEF',substring(@bin,@i,1)/16+1,1) +substring('0123456789ABCDEF',substring(@bin,@i,1)%16+1,1) +@re ,@i=@i-1 RETURN(@re) end -------------------------------------------------- --算法开始 --订单详细Id declare @OrderDetailId int --此处Id值自行替换 set @OrderDetailId=1 --声明结果字符串 declare @Result nvarchar(50) set @Result='' --起始编号 declare @StartNum nvarchar(10) set @StartNum=3 --字符串长度13位:起始编码+12位数字 declare @Num nvarchar(255) set @Num= @StartNum +dbo.padleft(convert(nvarchar(50),@OrderDetailId),12,'0')--将Id转为字符串,并填充满12位,如:@OrderDetailId=1,那么结果为:000000000001 --@Num结果为:3000000000001 --声明MAC地址 declare @MacAddress nvarchar(50) --将@Num转为16进制:000002BA7DEF3001,并截取后12位:02BA7DEF3001 set @MacAddress=substring(dbo.Binary2HexStr(CONVERT(VARBINARY, convert(bigint,@Num))),5,12) declare @i int set @i=0 --将@MacAddress每间隔2位添加一个冒号,得到结果:02:BA:7D:EF:30:01 while(@i<=len(@MacAddress)) begin set @Result=@Result+substring(@MacAddress,@i,1) set @i=@i+1 if((@i+1)%2=0 and @i not in(1,13)) begin set @Result=@Result+':' end end --打印结果 print @Result ``` ### 3、签名算法CSharp版 ```csharp ///
/// 获取签名 ///
///
请求参数集合 ///
签名秘钥,在FastOSAPI服务端里可设置 ///
public string GetSign(Hashtable par, string secret) { //声明一个字符串集合 List
parlist = new List
(); //遍历参数 foreach (string k in par.Keys) { //如果参数名为“签名”保留名称,则跳过 if (k == "_RPW_Sign") { continue; } //得到key=urlencode(value) string kvstr = k + "=" + HttpUtility.UrlEncode(par[k].ToString()); //往集合里添加字符串 parlist.Add(kvstr); } //对字符串集合进行排序 parlist.Sort(); //将字符串集合转为字符串,以&作为分隔符 string ParStr = string.Join("&", parlist.ToArray()); //拼接秘钥,Secret无须urlencode ParStr = ParStr + "&" + secret; //进行MD5加密 string sign = FormsAuthentication.HashPasswordForStoringInConfigFile(ParStr, "Md5"); return sign; } ```