通過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 */
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com