通过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. flex布局浅谈和实例

    阿基米德曾说给我一个支点我可以撬动地球,而拥有flex基本可以撬动所有的布局. 1.flex布局基本介绍及效果展示 工欲善其事必先利其器,来来来,一起看下基础知识先(呵~,老掉牙,但是有用啊). ** ...

  2. ADO.NET 基础

    *程序要和数据库交互要通过ADO.NET进行,通过ADO.NET就能在程序中执行SQL了,ADO.NET中提供了对各种不同数据库的统一操作接口. 1.连接SQLServer 连接字符串,程序通过链接字 ...

  3. HipChat上传文件报未知错误解决方案

    前言 HipChat是Atlassian公司的一款团队协作即时通讯工具,服务端为Linux(官方给的服务端就是一个虚拟机),在Windows.Linux.Android.IOS.Mac等平台都有客户端 ...

  4. sql跨数据库转移

    结构一样的话insert into 数据库A.dbo.TableAselect * from 数据库B.dbo.TableA 另外:nsert into DDD(字段1,字段2,字段3 .....)( ...

  5. 使用栈Stack对整数数值的运算表达式字符串进行运算C#

    这里如果对于形如字符串“((6+((7+8)-9)*9+8/2)-3)/2”的运算表达式进行运算.接触过此类的同学知道这种存在着运算符优先级的表达式,不能直接从左到右进行运算,我们使用OperandS ...

  6. 重新想象 Windows 8 Store Apps (57) - 本地化和全球化

    [源码下载] 重新想象 Windows 8 Store Apps (57) - 本地化和全球化 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 本地化和全球化 本地化 ...

  7. map与vector---Email Aliases

    Description Polycarp has quite recently learned about email aliases. Of course, he used to suspect t ...

  8. dbcp2和dbcp 1.4在API层面的差异

    近期处于某种原因,打算把所有系统的数据库连接统一升级到dbcp2.发现有几处与dbcp 1在API层面发生了变化,主要如下所示: dbcp 2:org.apache.commons.dbcp2.Bas ...

  9. jQuery实现图片伦播效果(淡入淡出+左右切换)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. [ASP.NET MVC] 使用Bootstrap套件

    [ASP.NET MVC] 使用Bootstrap套件 前言 在开发Web项目的时候,除了一些天赋异禀的开发人员之外,大多数的开发人员应该都跟我一样,对于如何建构出「美观」的用户接口而感到困扰.这时除 ...