视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
教你怎样写自定义IP地址算法
2020-11-09 14:10:42 责编:小采
文档

通过IP地址可以看到算法规律,写成自定义IP地址,也可以把IP地址转为自定格式的IP地址。也可以用于加密一些明文数字。以下写正反算法(以1次方为最小单位): USE tempdbGOIF OBJECT_ID('fn_NrToChar') IS NOT NULL DROP FUNCTION fn_NrToCharGO/*************

通过IP地址可以看到算法规律,写成自定义IP地址,也可以把IP地址转为自定格式的IP地址。也可以用于加密一些明文数字。以下写正反算法(以1次方为最小单位):

USE tempdb
GO
IF OBJECT_ID('fn_NrToChar') IS NOT NULL
 DROP FUNCTION fn_NrToChar
GO
/****************************************************************************************************************************************************************
%%函数名:fn_NrToChar

%%功能:把数字改为字符
****************************************************************************************************************************************************************
%%编写:Roy 2014-12-09

****************************************************************************************************************************************************************/
CREATE FUNCTION fn_NrToChar ( 
	@Nr BIGINT
	,@NrSystem BIGINT=168	--进制
	,@Split VARCHAR(2)='**'	--分隔符
	,@PartCount BIGINT=5	--分段数
)
RETURNS VARCHAR(50)
AS 
BEGIN
	DECLARE @S VARCHAR(50)=''
	WHILE @PartCount>0
	SELECT @S=@S+CASE WHEN @S>'' THEN @Split ELSE '' END+RTRIM(@Nr/POWER(@NrSystem,@PartCount)),@Nr=@Nr%POWER(@NrSystem,@PartCount),@PartCount=@PartCount-1
	RETURN @S
END
GO
IF OBJECT_ID('fn_CharToNr') IS NOT NULL
 DROP FUNCTION fn_CharToNr
GO
/****************************************************************************************************************************************************************
%%函数名:fn_CharToNr

%%功能:把字符改为数字
****************************************************************************************************************************************************************
%%编写:Roy 2014-12-09

****************************************************************************************************************************************************************/
CREATE FUNCTION fn_CharToNr ( 
	@Str VARCHAR(50)
	,@NrSystem BIGINT=168	--进制
	,@Split VARCHAR(2)='**'	--分隔符
	,@PartCount BIGINT=5	--分段数
)
RETURNS BIGINT
AS 
BEGIN
	DECLARE @Nr BIGINT=0,@StartLen TINYINT,@StrLen TINYINT
	SELECT @StrLen=LEN(@Split),@StartLen=1
	WHILE @PartCount>0
	SELECT @Nr=@Nr+SUBSTRING(@Str,@StartLen,CHARINDEX(@Split,@Str+@Split,@StartLen)-@StartLen)*POWER(@NrSystem,@PartCount),@StartLen=CHARINDEX(@Split,@Str+@Split,@StartLen)+@StrLen,@PartCount=@PartCount-1
	RETURN @Nr
END
GO

--测试1(以IP地址为例)

SELECT dbo.fn_CharToNr('192.168.0.1',256,'.',4)
SELECT dbo.fn_NrToChar(827452293376,256,'.',4)

/*
827452293376

192.168.0.1
*/
go
--测试2
DECLARE @i BIGINT=168
SELECT POWER(@i,5)

--133827821568
SELECT dbo.fn_CharToNr('167**16**1**6**07',DEFAULT,DEFAULT,DEFAULT)
SELECT dbo.fn_NrToChar(22361996620824,DEFAULT,DEFAULT,DEFAULT)
/*
22361996620824

167**16**1**6**7
*/

下载本文
显示全文
专题