通过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. 关于SQL SERVER高并发解决方案

    现在大家都比较关心的问题就是在多用户高并发的情况下,如何开发系统,这对我们程序员来说,确实是值得研究,最近找工作面试时也经常被问到,其实我早有去关心和了解这类问题,但一直没有总结一下,导致面试时无法很 ...

  2. sprint 1 总结

    1.之前已经总结了一下了.. 提前完成了任务,明天还要继续测试一下,看有没有BUG.这次搭建,遇到好多问题,服务器经常不稳定崩毁,毕竟免费...不能完美..途中经常小细节没注意,导致错误连连,卡了好几 ...

  3. JS 将一段文本 每个英文首字母大写

    function replaceStr(str){ // 正则法 str = str.toLowerCase(); var reg = /\b(\w)|\s(\w)/g; // \b判断边界\s判断空 ...

  4. ok6410 android driver(11)

    This essay, I go to a deeply studying to android HAL device driver program. According to the android ...

  5. C#中国象棋+游戏大厅 服务器 + 客户端源码

    来源:www.ajerp.com/bbs C#中国象棋+游戏大厅 服务器 + 客户端源码 源码开源 C#版中国象棋(附游戏大厅) 基于前人大虾的修改版 主要用委托实现 服务器支持在线人数,大厅桌数的设 ...

  6. 关于WPF绘图中的path.data在后台重新赋值的语法

    //XAML语法 <Path Name="path_M" Fill="LawnGreen" Data="M 0 0 L 100 0 L 100 ...

  7. Docker源码编译

    官方建议docker源码编译在docker容器内进行,因为官方提供的容器内已经继承了编译需要的环境,如果非要自己搭建编译环境也不是不可以,就是稍微有些繁琐.以下以1.8.2版本为例. 1.pull d ...

  8. 性能分析之-- JAVA Thread Dump 分析综述

    性能分析之-- JAVA Thread Dump 分析综述       一.Thread Dump介绍 1.1什么是Thread Dump? Thread Dump是非常有用的诊断Java应用问题的工 ...

  9. 设置让ASP.NET管道接收所有类型的请求

    在web.config文件添加如下一段配置: <configuration> <system.webServer> <modules runAllManagedModul ...

  10. 媲美oracle awr/statspack的mysql awr第一版发布

    现发布alpha版mysql awr,其提供的特性类似于oracle awr或statspack+集中式监控.对于原来从事oracle dba或者相关运维的人原来说,这会是个不错的选择. 至于我为什么 ...