教你怎样写自定义IP地址算法
通过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地址算法的更多相关文章
- 自定义 IP 地址
可以在安装的时候,点击网络配置 1.修改网卡配置 编辑:vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 #描述网卡对应的设备别名,例如 ...
- 本地ip变化,自定义IP地址
1.打开网络和internet 设置 2.右键属性 3.修改
- Win8怎么查看IP地址
win8查看自己IP地址方法一:查看本地网络法 1.首先从桌面右下角的“网络连接图标上”点击右键,然后选择打开网络和共享中心,如下图所示: 打开win8网络和共享中心 2.之后在打开的网络和共享中心窗 ...
- 火狐浏览器插件Modify Headers伪造IP地址
安装插件:先打开火狐浏览器 => 找到下载好的 modify_headers.xpi 插件文件 => 鼠标按住插件文件不放,拖拽到火狐浏览器界面 => 按提示重启浏览器 => ...
- 火狐浏览器之伪造IP地址
前言: 前段时间,测试过程中需要伪造来源IP地址,百思不得其解,因而发现火狐浏览器的这个Modify Headers插件,十分好用,推荐给大家. 步骤: 1.安装插件Modify Headers 进入 ...
- 给openvpn客户分配固定ip地址
虽然openvpn提供dhcp服务,但是dhcp是有租约的,到期后会重新分配ip,造成连接中断的问题,所以最好还是给客户端固定一个ip. 思路:开启客户端配置目录,然后为每一个客户建一个配置文件,里面 ...
- JavaScript和微信小程序获取IP地址的方法
最近公司新加了一个需求,根据用户登录的IP地址判断是否重复登录,重复登录就进行逼退,那么怎么获取到浏览器的IP地址呢?最后发现搜狐提供了一个JS接口,可以通过它获取到客户端的IP. 接口地址如下: h ...
- linux基础-临时和永久修改ip地址以及通配符相关
一.临时配置网络(ip,网关,dns) 修改临时ip地址: 1.ifconfig查看当前的网卡和ip地址 2.临时修改IP地址:ifconfig ens32 192.168.16.200/24,ifc ...
- ubuntu ifconfig 不显示IP地址
本文转载:https://blog.csdn.net/cmh477660693/article/details/52760236 ubuntu终端下命令ifconfig的问题解决 问题一. ifcon ...
随机推荐
- IOS开发中设置控件内容对齐方式时容易混淆的几个属性
IOS开发中四个容易混淆的属性: 1. textAligment : 文字的水平方向的对齐方式 1> 取值 NSTextAlignmentLeft = 0, // 左对齐 NST ...
- 常见的几种 CSS 水平垂直居中解决办法
用CSS实现元素的水平居中,比较简单,可以设置text-align center,或者设置 margin-left:auto; margin-right:auto 之类的即可. 主要麻烦的地方还是在垂 ...
- spring.Net之Ioc在MVC中的使用
1.引入dll Common.Logging.dll Spring.Core.dll Spring.Web.dll Spring.Web.Extensions.dll Spring.Web.Mvc4. ...
- 用javascript去掉字符串空格的办法
今天遇到了以关于JavaScript 中怎么去掉 字符串中前后两段的空格 ,我只好向就得js中也后Trim() 函数,后来试试了不 行,就网上找了下解决方法,其中用到了正则表达式 ,整理了下: < ...
- (转载)IO-同步、异步、阻塞、非阻塞
一.概述 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不 ...
- yii2.0用户登录,退出判断(摘录)
文章来源:http://blog.sina.com.cn/s/blog_88a65c1b0101ix13.html 判断用户是否登录 在 Yii2.0 里面,判断用户是否已经登录,我们用下面的代码即可 ...
- 一个SpringMVC简单Demo中出现的错误
最近在学springmvc 一个简答的Springmvc配置包括如下步骤: 1.在 web.xml 文件中配置 DispatcherServlet (该中央控制器相当于 MVC 模式中的 C),还可以 ...
- 关于SQL2008 “不允许保存更改。您所做的更改要求删除并重新创建以下表。您对无法重新创建的标进行了更改或者启用了‘阻止保存要求重新创建表的更改’” 解决方案
不允许保存更改.您所做的更改要求删除并重新创建以下表.您对无法重新创建的标进行了更改或者启用了“阻止保存要求重新创建表的更改” 解决方法: 打开SQL SERVER 2008 工具-->选项- ...
- 类库LinqToExcel的介绍
LinqToExcel是一个.net framework平台下开源项目,它主要实现了LINQ的语法查询Excel电子表格.类型之前的LINQToXXX如果你是LINQ语法糖爱好者那最适 ...
- oGrid 初探
oGrid 是个还蛮有趣的 pure JavaScript grid 控件 code 并不多而且是纯 JavaScript 写成,一条小龙觉得还算蛮好理解,不像其他几乎都是用 Jquery 为 bas ...