字符串生成伪唯一十六进制整数
来源:互联网 发布:足球 数据 编辑:程序博客网 时间:2024/06/04 18:40
最近对接了让人头疼的广告EXCHANGE,需要为每个广告设置一个全局唯一的十六进制ID。初步设计是讲2个UDID(BIGINT20)拼接起来,但这样遇到2个问题:
唯一性:2个UDID都是数据库自增主键,类型为BIGINT20,拼接会导致非唯一性
溢出:对方使用long类型接受ID,会导致溢出
因此,要对拼接后的字符串做特殊处理,处理的大致方向是保证唯一性以及缩短字符串长度,大致方法是先做MD5,然后对拼接字符串做哈希:
public static long generateUUID(String id){ //MD5 id MessageDigest md5 = null; try { md5 = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } //AdContentId + schemaId 做MD5 byte[] bytes = md5.digest(id.toString().getBytes()); StringBuffer sb = new StringBuffer(); for(byte b : bytes){ //缩短字符串长度:对每一位取后4位,做16进制处理 int val = (int)b & 0xf; sb.append(Integer.toHexString(val)); } //Hash String to Long return SDBMHash(sb.toString().toCharArray()); } private static long SDBMHash(char[] str) { long hash = 0L; for(char c : str) hash = (c) + (hash << 6) + (hash << 16) - hash; return (hash & Long.MAX_VALUE); }
0 0
- 字符串生成伪唯一十六进制整数
- java生成系统唯一性十六进制字符串
- 生成伪随机整数
- 整数 转化成 十六进制 字符串
- 生成唯一的字符串
- php生成唯一字符串
- PHP生成唯一字符串
- 生成伪随机整数rand()
- 由一个任意长度字符串生成唯一的32位整数
- 由一个任意长度字符串生成唯一的32位整数
- Java生成十六进制的MD5加密字符串
- C#生成唯一的字符串或者数字
- 生成唯一的字符串算法---UUID
- c# 字符串生成唯一长整型
- 两种生成唯一字符串的方法
- Java API生成唯一标识字符串 UUID
- 一些PHP生成唯一字符串的方法
- YII2.0 使用UUID 生成唯一字符串
- Using the iPod Library
- 大型分布式网站架构
- 开源项目 FDTemplateLayoutCell研究
- 蓝桥杯 2015校内选拔试题 第四题:数字与文字
- css定宽块级元素居中
- 字符串生成伪唯一十六进制整数
- Windows Server 2012体验之部署第一台域控制器
- 与关系型数据库相比,MongoDB的优点
- PullScrollView详解(一)——自定义控件属性
- SQL SP_EXECUTESQL
- Latex之BibTex引用参考文献
- Android Studio系列-单元测试入门篇
- 【设计模式之策略模式】
- PullScrollView详解(二)——Animation、Layout与下拉回弹