通过IP地址可以看到算法规律,写成自定义IP地址,也可以把IP地址转为自定格式的IP地址。也可以用于加密一些明文数字。起始次方可自定义(以1次方和0次方为例)

a.以下写正反算法(以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
*/

b.以0次方为最小单位时,是以1为最小数字,如IP为测试例子效果如下:

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
SET @PartCount=@PartCount-1 --以0次方为最小单位(分段数减1)
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 @PartCount = @PartCount - 1 --以0次方为最小单位(分段数减1)
,@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('0.0.0.1',256,'.',4)
SELECT dbo.fn_NrToChar(1,256,'.',4) /*
1 0.0.0.1
*/ --测试2(以最大IP地址为例)
SELECT dbo.fn_CharToNr('255.255.255.255',256,'.',4)
SELECT dbo.fn_NrToChar(4294967295,256,'.',4)
/*
4294967295 255.255.255.255 */
go

教你怎样写自定义IP地址算法的更多相关文章

  1. 自定义 IP 地址

    可以在安装的时候,点击网络配置 1.修改网卡配置 编辑:vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 #描述网卡对应的设备别名,例如 ...

  2. 本地ip变化,自定义IP地址

    1.打开网络和internet 设置 2.右键属性 3.修改

  3. Win8怎么查看IP地址

    win8查看自己IP地址方法一:查看本地网络法 1.首先从桌面右下角的“网络连接图标上”点击右键,然后选择打开网络和共享中心,如下图所示: 打开win8网络和共享中心 2.之后在打开的网络和共享中心窗 ...

  4. 火狐浏览器插件Modify Headers伪造IP地址

    安装插件:先打开火狐浏览器 => 找到下载好的 modify_headers.xpi 插件文件 => 鼠标按住插件文件不放,拖拽到火狐浏览器界面 => 按提示重启浏览器 => ...

  5. 火狐浏览器之伪造IP地址

    前言: 前段时间,测试过程中需要伪造来源IP地址,百思不得其解,因而发现火狐浏览器的这个Modify Headers插件,十分好用,推荐给大家. 步骤: 1.安装插件Modify Headers 进入 ...

  6. 给openvpn客户分配固定ip地址

    虽然openvpn提供dhcp服务,但是dhcp是有租约的,到期后会重新分配ip,造成连接中断的问题,所以最好还是给客户端固定一个ip. 思路:开启客户端配置目录,然后为每一个客户建一个配置文件,里面 ...

  7. JavaScript和微信小程序获取IP地址的方法

    最近公司新加了一个需求,根据用户登录的IP地址判断是否重复登录,重复登录就进行逼退,那么怎么获取到浏览器的IP地址呢?最后发现搜狐提供了一个JS接口,可以通过它获取到客户端的IP. 接口地址如下: h ...

  8. linux基础-临时和永久修改ip地址以及通配符相关

    一.临时配置网络(ip,网关,dns) 修改临时ip地址: 1.ifconfig查看当前的网卡和ip地址 2.临时修改IP地址:ifconfig ens32 192.168.16.200/24,ifc ...

  9. ubuntu ifconfig 不显示IP地址

    本文转载:https://blog.csdn.net/cmh477660693/article/details/52760236 ubuntu终端下命令ifconfig的问题解决 问题一. ifcon ...

随机推荐

  1. 高级四则运算器—结对项目反思(193 & 105)

    高级四则运算器—结对项目反思(193 & 105) 本周我和一位韩国同学(71061105)一起结对编程完成了我们的结对项目——高级的小学四则运算题目生成器. PSP表格   PSP2.1 P ...

  2. SpringMVC基础——一个简单的例子

    一.导入 jar 包 二.配置 web.xml 文件 <servlet> <servlet-name>dispatcherServlet</servlet-name> ...

  3. android:inputType参数类型说明

    android:inputType参数类型说明 android:inputType="none"--输入普通字符 android:inputType="text" ...

  4. ASP.NET MVC的路由

    好久没写博文了,感觉最近好像少了点动力.唉!这回就看看这个MVC的路由. 说这个路由机制其实不是MVC里面特有的,ASP.NET里面本身就有的,只不过在WebForm里面一般比较少用,而在MVC里就是 ...

  5. Equeue初识

    详细解说: http://www.cnblogs.com/netfocus/p/3595410.html 简单代码用法: Producer 端代码用法实例 和 Customer 端代码用法示例: ht ...

  6. SignalR-入门

    1.什么是SignalR: ASP.NET SignalR是为简化开发开发人员将实时web内容添加到应用程序过程而提供的类库.实时web功能指的是让服务器代码可以随时主动推送内容给客户端,而不是让服务 ...

  7. [moka学习笔记]yii2.0 rules的用法(收集,不定期更新)

    public function rules(){ return [ ['title','required','message'=>'标题不能为空'], ['title','string','mi ...

  8. 快速设置超炫banner,js插件

    http://www.themepunch.com/codecanyon/revolution_wp/ 记录一下以后用 //出自http://www.cnblogs.com/ahjesus 尊重作者辛 ...

  9. 什么是CSR证书申请文件?

      CSR是Cerificate Signing Request的英文缩写,即证书请求文件,在多方之间在互联网上安全分享数据的公钥基础架构PKI系统中,CSR文件必须在申请和购买SSL证书之前创建.也 ...

  10. git 删除错误提交的commit

    方法: 根据–soft –mixed –hard,会对working tree和index和HEAD进行重置:    git reset --mixed:此为默认方式,不带任何参数的git reset ...