根据url生成唯一的idkey,记录并分享:

    public class UrlToUniqueKey
{
private static Hashtable generators = new Hashtable();
public static long[,] polynomials = new long[, ]
{
{
0L,
0L
},
{
-4611686018427387904L,
-4611686018427387904L
},
{
-2305843009213693952L,
-2305843009213693952L
},
{
-3458764513820540928L,
-5764607523034234880L
},
{
-576460752303423488L,
-576460752303423488L
},
{
-1441151880758558720L,
-4899916394579099648L
},
{
-2738188573441261568L,
-5332261958806667264L
},
{
-1945555039024054272L,
-1945555039024054272L
},
{
-7602076171001397248L,
-3134505340649865216L
},
{
-9169328841326329856L,
-8628896886041870336L
},
{
-5719571526760529920L,
-1612288666598637568L
},
{
-2742692173068632064L,
-3913628076184961024L
},
{
-1776670052997660672L,
-2407174000829530112L
},
{
-2005227734086713344L,
-7718043861406187520L
},
{
-3112550292466434048L,
-5147051424131055616L
},
{
-2113595600120315904L,
-7045600142044430336L
},
{
-3682677857793867776L,
-7529033414544982016L
},
{
-2812286861060341760L,
-6211097204841512960L
},
{
-7338580408428134400L,
-181868019327172608L
},
{
-4070603152259284992L,
-7580349821236543488L
},
{
-4690912428278415360L,
-1656541810593366016L
},
{
-8730258663983284224L,
-1124153882377715712L
},
{
-7455702586042089472L,
-7995369281233616896L
},
{
-58297206016311296L,
-5584750510474264576L
},
{
-8198983991290757120L,
-6900195776585007104L
},
{
-3368309616348758016L,
-777578196575977472L
},
{
-7950798515817414656L,
-5274165001345564672L
},
{
-1814110279349305344L,
-3073563053254508544L
},
{
-7333090856108294144L,
-299958969764413440L
},
{
-5862047463258456064L,
-1088406921112715264L
},
{
-2699705949936943104L,
-6180435270106611712L
},
{
-5010893113942605824L,
-745326200523587584L
},
{
-7247248171544346624L,
-7637035222663430144L
},
{
-379617898928275456L,
-2128952956840574976L
},
{
-8982278211127738368L,
-8328970742175629312L
},
{
-2699136824088985600L,
-657743201922187264L
},
{
-5723859659287166976L,
-3191693334452109312L
},
{
-5937852116755283968L,
-8585462099679903744L
},
{
-4340513297460625408L,
-2535761738024878080L
},
{
-7223736098545991680L,
-5810321976182439936L
},
{
-8771886216598519808L,
-8198507976365965312L
},
{
-1991715210309664768L,
-3768584310714531840L
},
{
-9162551332419141632L,
-8616797614972600320L
},
{
-719027294788648960L,
-6649233720883544064L
},
{
-3559483092657242112L,
-7475962079365038080L
},
{
-713657193466691584L,
-3981624362359062528L
},
{
-2043424698022887424L,
-3853773324916752384L
},
{
-4041900042031005696L,
-2750302262364798976L
},
{
-4436928417950760960L,
-8365357674703716352L
},
{
-5903553087924551680L,
-232537924545363968L
},
{
-8728448178608234496L,
-4183444001187078144L
},
{
-2341229233224585216L,
-6731777037870903296L
},
{
-1649801635265304576L,
-2988673641163274240L
},
{
-7620924682850272256L,
-4999586984279010304L
},
{
-6766504171168936448L,
-3233736554084598272L
},
{
-4307058212505990400L,
-7352830162319492864L
},
{
-6559722688844616064L,
-3544821563555732608L
},
{
-5503660899170514624L,
-9177641346571454016L
},
{
-187437317177603296L,
-1362648669985435232L
},
{
-24562796859796592L,
-1298422235250900464L
},
{
-3825548837209328312L,
-4007863133653759080L
},
{
-5023278451590057620L,
-8135395730479815484L
},
{
-1370071926941500434L,
-7957612307809224958L
},
{
-2163743556238479977L,
-2346333074831914631L
},
{
-2935493925047926053L,
-7378668602973054136L
}
};
public static UrlToUniqueKey std64 = UrlToUniqueKey.make(UrlToUniqueKey.polynomials[, ], );
public static UrlToUniqueKey std32 = UrlToUniqueKey.make(UrlToUniqueKey.polynomials[, ], );
public static UrlToUniqueKey std40 = UrlToUniqueKey.make(UrlToUniqueKey.polynomials[, ], );
public static UrlToUniqueKey std24 = UrlToUniqueKey.make(UrlToUniqueKey.polynomials[, ], );
private long zero = 0L;
private long one = long.MinValue;
public long empty;
public int degree;
public long polynomial;
private long[,] ByteModTable; private UrlToUniqueKey(long polynomial, int degree)
{
this.degree = degree;
this.polynomial = polynomial;
this.ByteModTable = new long[, ];
long[] numArray = new long[];
long num1 = long.MinValue;
long num2 = this.rightMove(long.MinValue, degree - );
for (int index = ; index < ; ++index)
{
numArray[index] = num1;
bool flag = (num1 & num2) != 0L;
num1 = this.rightMove(num1, );
if (flag)
num1 ^= polynomial;
}
this.empty = numArray[];
for (int index1 = ; index1 < ; ++index1)
{
for (int index2 = ; index2 < ; ++index2)
{
long num3 = 0L;
for (int index3 = ; index3 < ; ++index3)
{
if ((index2 & << index3) != )
num3 ^= numArray[(int)sbyte.MaxValue - index1 * - index3];
}
this.ByteModTable[index1, index2] = num3;
}
}
} public static UrlToUniqueKey make(long polynomial, int degree)
{
long num = polynomial;
UrlToUniqueKey heritrix = (UrlToUniqueKey)UrlToUniqueKey.generators[(object)];
if (heritrix == null)
{
heritrix = new UrlToUniqueKey(polynomial, degree);
UrlToUniqueKey.generators.Add((object)num, (object)heritrix);
}
return heritrix;
} private long rightMove(long value, int pos)
{
if (pos != )
{
long num = long.MaxValue;
value >>= ;
value &= num;
value >>= pos - ;
}
return value;
} public static long long_rightMove(long value, int pos)
{
if (pos != )
{
long num = long.MaxValue;
value >>= ;
value &= num;
value >>= pos - ;
}
return value;
} private int int_rightMove(int value, int pos)
{
if (pos != )
{
int num = int.MaxValue;
value >>= ;
value &= num;
value >>= pos - ;
}
return value;
} public long reduce(long fp)
{
int num1 = - this.degree / ;
long num2 = num1 == ? 0L : fp & -1L << * num1;
long num3 = 0L;
for (int index = ; index < num1; ++index)
{
num3 ^= this.ByteModTable[ + index, (int)fp & (int)byte.MaxValue];
fp = this.rightMove(fp, );
}
return num2 ^ num3;
} public long extend_byte(long f, int v)
{
f ^= (long)((int)byte.MaxValue & v);
int num = (int)f;
return this.rightMove(f, ) ^ this.ByteModTable[, num & (int)byte.MaxValue];
} public long extend_char(long f, int v)
{
f ^= (long)((int)ushort.MaxValue & v);
int num = (int)f;
return this.rightMove(f, ) ^ this.ByteModTable[, num & (int)byte.MaxValue] ^ this.ByteModTable[, this.int_rightMove(num, ) & (int)byte.MaxValue];
} public long extend_int(long f, int v)
{
f ^= (long)uint.MaxValue & (long)v;
int num1 = (int)f;
long num2 = this.rightMove(f, ) ^ this.ByteModTable[, num1 & (int)byte.MaxValue];
int num3 = this.int_rightMove(num1, );
long num4 = num2 ^ this.ByteModTable[, num3 & (int)byte.MaxValue];
int num5 = this.int_rightMove(num3, );
return num4 ^ this.ByteModTable[, num5 & (int)byte.MaxValue] ^ this.ByteModTable[, this.int_rightMove(num5, ) & (int)byte.MaxValue];
} public long extend_long(long f, long v)
{
f ^= v;
long num1 = this.ByteModTable[, (int)(f & (long)byte.MaxValue)];
f = this.rightMove(f, );
long num2 = num1 ^ this.ByteModTable[, (int)(f & (long)byte.MaxValue)];
f = this.rightMove(f, );
long num3 = num2 ^ this.ByteModTable[, (int)(f & (long)byte.MaxValue)];
f = this.rightMove(f, );
long num4 = num3 ^ this.ByteModTable[, (int)(f & (long)byte.MaxValue)];
f = this.rightMove(f, );
long num5 = num4 ^ this.ByteModTable[, (int)(f & (long)byte.MaxValue)];
f = this.rightMove(f, );
long num6 = num5 ^ this.ByteModTable[, (int)(f & (long)byte.MaxValue)];
f = this.rightMove(f, );
long num7 = num6 ^ this.ByteModTable[, (int)(f & (long)byte.MaxValue)];
f = this.rightMove(f, );
return num7 ^ this.ByteModTable[, (int)(f & (long)byte.MaxValue)];
} public long fp(byte[] buf, int start, int n)
{
return this.extend(this.empty, buf, start, n);
} public long fp(char[] buf, int start, int n)
{
return this.extend(this.empty, buf, start, n);
} public long fp(string s)
{
return this.extend(this.empty, s);
} public long fp(int[] buf, int start, int n)
{
return this.extend(this.empty, buf, start, n);
} public long fp(long[] buf, int start, int n)
{
return this.extend(this.empty, buf, start, n);
} public long fp8(string s)
{
return this.extend8(this.empty, s);
} public long fp8(char[] buf, int start, int n)
{
return this.extend8(this.empty, buf, start, n);
} public long extend(long f, byte v)
{
return this.reduce(this.extend_byte(f, (int)v));
} public long extend(long f, char v)
{
return this.reduce(this.extend_char(f, (int)v));
} public long extend(long f, int v)
{
return this.reduce(this.extend_int(f, v));
} public long extend(long f, long v)
{
return this.reduce(this.extend_long(f, v));
} public long extend(long f, byte[] buf, int start, int n)
{
for (int index = ; index < n; ++index)
f = this.extend_byte(f, (int)buf[start + index]);
return this.reduce(f);
} public long extend(long f, char[] buf, int start, int n)
{
for (int index = ; index < n; ++index)
f = this.extend_char(f, (int)buf[start + index]);
return this.reduce(f);
} public long extend(long f, string s)
{
int length = s.Length;
for (int index = ; index < length; ++index)
{
int v = (int)s[index];
f = this.extend_char(f, v);
}
return this.reduce(f);
} public long extend(long f, int[] buf, int start, int n)
{
for (int index = ; index < n; ++index)
f = this.extend_int(f, buf[start + index]);
return this.reduce(f);
} public long extend(long f, long[] buf, int start, int n)
{
for (int index = ; index < n; ++index)
f = this.extend_long(f, buf[start + index]);
return this.reduce(f);
} public long extend8(long f, string s)
{
int length = s.Length;
for (int index = ; index < length; ++index)
{
int v = (int)s[index];
f = this.extend_byte(f, v);
}
return this.reduce(f);
} public long extend8(long f, char[] buf, int start, int n)
{
for (int index = ; index < n; ++index)
f = this.extend_byte(f, (int)buf[start + index]);
return this.reduce(f);
} public static ulong createUrlkey(string url)
{
int length = url.IndexOf("://");
if (length > )
length = url.IndexOf('/', length + "://".Length);
string s = length == - ? url : url.Substring(, length);
return Convert.ToUInt64(Convert.ToString(UrlToUniqueKey.std32.fp(s) | UrlToUniqueKey.long_rightMove(UrlToUniqueKey.std40.fp(url), ), ).PadLeft(, ''), );
}
/// <summary>
/// 根据url生成唯一id
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static long createUrlToLong(string url)
{
int length = url.IndexOf("://");
if (length > )
length = url.IndexOf('/', length + "://".Length);
string s = length == - ? url : url.Substring(, length);
return UrlToUniqueKey.std32.fp(s) | UrlToUniqueKey.long_rightMove(UrlToUniqueKey.std40.fp(url), );
}
}

C#根据url生成唯一的key的更多相关文章

  1. 在C#中生成唯一的字符串和数字【GUID】转

    转自:http://www.cnblogs.com/lcwzj/archive/2009/04/16/1436992.html 当我们想要获得一个唯一的key的时候,通常会想到GUID.这个key非常 ...

  2. PHP使用SnowFlake算法生成唯一ID

    前言:最近需要做一套CMS系统,由于功能比较单一,而且要求灵活,所以放弃了WP这样的成熟系统,自己做一套相对简单一点的.文章的详情页URL想要做成url伪静态的格式即xxx.html 其中xxx考虑过 ...

  3. YII框架路由和URL生成

    路由和URL生成 当一个YII应用开始处理一个请求的时候,它首先要做的便是将请求的URL转化成一个路由.路由的作用是用于后续实例化相应的控制器和操作,以便处理请求,整个处理过程便叫做路由.路由的逆过程 ...

  4. 转:C#生成唯一值的方法汇总

    这篇文章主要介绍了C#生成唯一值的方法汇总,有需要的朋友可以参考一下 生成唯一值的方法很多,下面就不同环境下生成的唯一标识方法一一介绍,作为工作中的一次总结,有兴趣的可以自行测试: 一.在 .NET ...

  5. C#生成唯一值的方法汇总

    生成唯一值的方法很多,下面就不同环境下生成的唯一标识方法一一介绍,作为工作中的一次总结,有兴趣的可以自行测试: https://www.cnblogs.com/xinweichen/p/4287640 ...

  6. Laravel 深入理解路由和URL生成

    原文地址: Laravel 深入理解路由和URL生成 在模板中我们一般不会直接写死url,而是用url助手生成url,本文介绍一下url助手的使用以及遇到的一些比较头疼的问题. 首先,我们创建了一个路 ...

  7. php生成唯一订单号

    支持更改长度/** * 生成唯一订单号 * */ function build_order_no(){ return date('Ymd').substr(implode(NULL, array_ma ...

  8. ASP.NET根据URL生成网页缩略图示例程序(C#语言)

    工作中可能马上要用到根据URL生成网页缩略图功能,提前做好准备. 在网上找了份源码,但是有错误:当前线程不在单线程单元中,因此无法实例化 ActiveX 控件“8856f961-340a-11d0-a ...

  9. php生成唯一随机码

    最终使用: echo md5(time() . mt_rand(1,1000000)) //A:利用时间戳的方法 md5("admin"); // B:32位MD5加密 subst ...

随机推荐

  1. 【DUBBO】Dubbo原理解析-Dubbo内核实现之SPI简单介绍

    Dubbo采用微内核+ 插件体系,使得设计优雅,扩展性强.那所谓的微内核+插件体系是如何实现的呢!大家是否熟悉spi(service providerinterface)机制,即我们定义了服务接口标准 ...

  2. [LeetCode系列]翻转链表问题II

    给定一个链表和两个整数m, n, 翻转链表第m个节点到第n个节点(从1开始计数). 如, 给定链表: 1->2->3->4->5->NULL, 以及 m = 2, n = ...

  3. 简单安装MySQL(RPM方式)

    本次测试使用一台ip为192.168.2.21的虚拟机 下边的步骤虽然多,但是跟着命令或者复制粘贴命令即可完成操作,并无难点 1.安装准备 MySQL-server-5.6.35-1.linux_gl ...

  4. Python2 和 Python3 的区别(待完善)

    1.宏观上 python2 :源码不标准,混乱,重复代码太多 python3 :统一 标准,去除重复代码. 2. print python2 :括号可有可无 print(a)  或  print ap ...

  5. cocos2d js 利用texture packer生成sprite

    cc.spriteFrameCache.addSpriteFrames(res.winLose_plist,res.winLose_png); var frame = cc.spriteFrameCa ...

  6. 双口RAM,值得研究

    在FPGA设计过程中,使用好双口RAM,也是提高效率的一种方法. 官方将双口RAM分为简单双口RAM和真双口RAM. 简单双口RAM只有一个写端口,一个读端口. 真双口RAM分别有两个写端口和两个读端 ...

  7. [模板]LCA的倍增求法解析

    题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下来N-1行每 ...

  8. 用活firewalld防火墙之service

    原文地址:http://www.excelib.com/article/291/show 前面学生已经给大家介绍了在firewalld中service的概念以及在zone中怎么使用service,但是 ...

  9. Servlet 前端后台交互

    一. URL地址传值   1.1. 地址传值 http://localhost:8080/xj/123/name.json servlet 对应接受方法 @RequestMapping(value=& ...

  10. 简单的PL/SQl链接远程ORACLE数据库方法

    简单的PL/SQl链接远程ORACLE数据库方法 PLSQL Developer新手使用教程 pasting