短链接 生成代码
2016-05-11 18:02
232 查看
package com.egou;
import java.util.Random;
/**
*
* description: 7位短链接生成代码<br/>
*
* @author suyongzhen
* @date 2016年5月11日
* @see
*
*/
public class ShortLink {
/** 网址长度为7 */
private static final int LENGTH = 7;
/** 每右移5位,生成一个字符 */
private static final int PER_VARCHAR = 5;
private static char[] c = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e',
'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
'V', 'W', 'X', 'Y', 'Z' };
public static void main(String[] args) {
// 2的35次方,每五位一个字符,可生成7个字符
// 11111111111111111111111111111111111
long long16 = (long) Math.pow(2, PER_VARCHAR * LENGTH) - 1;
// TODO md5-32位实现
String a = "F7491217829C527F3E81C1FCBB26C9F9";
// 生成随机数,使之成为35长度
// 每8字符=32位,加3位=111
Random random = new Random();
int nextInt = random.nextInt(8);
int subIndexStart = 0;
while (subIndexStart < a.length()) {
StringBuffer sb = new StringBuffer();
// 8位一组,使用16进行转换,可转换成 4*8=32长度二进制
String substring = a.substring(subIndexStart, subIndexStart += 8);
long parseLong = Long.parseLong(nextInt + substring, 16);
long x = long16 & parseLong;
for (int j = 0; j < LENGTH; j++) {
long x2 = (c.length - 1) & x;
sb.append(c[(int) x2]);
x = x >> PER_VARCHAR;
}
System.out.println(sb);
}
}
}
import java.util.Random;
/**
*
* description: 7位短链接生成代码<br/>
*
* @author suyongzhen
* @date 2016年5月11日
* @see
*
*/
public class ShortLink {
/** 网址长度为7 */
private static final int LENGTH = 7;
/** 每右移5位,生成一个字符 */
private static final int PER_VARCHAR = 5;
private static char[] c = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e',
'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
'V', 'W', 'X', 'Y', 'Z' };
public static void main(String[] args) {
// 2的35次方,每五位一个字符,可生成7个字符
// 11111111111111111111111111111111111
long long16 = (long) Math.pow(2, PER_VARCHAR * LENGTH) - 1;
// TODO md5-32位实现
String a = "F7491217829C527F3E81C1FCBB26C9F9";
// 生成随机数,使之成为35长度
// 每8字符=32位,加3位=111
Random random = new Random();
int nextInt = random.nextInt(8);
int subIndexStart = 0;
while (subIndexStart < a.length()) {
StringBuffer sb = new StringBuffer();
// 8位一组,使用16进行转换,可转换成 4*8=32长度二进制
String substring = a.substring(subIndexStart, subIndexStart += 8);
long parseLong = Long.parseLong(nextInt + substring, 16);
long x = long16 & parseLong;
for (int j = 0; j < LENGTH; j++) {
long x2 = (c.length - 1) & x;
sb.append(c[(int) x2]);
x = x >> PER_VARCHAR;
}
System.out.println(sb);
}
}
}
相关文章推荐
- Spring的PropertyPlaceholderConfigurer应用
- FreeMarker and Spring MVC
- java学习笔记(一)
- [随笔] 项目性能追踪 之 structs & spring 的拦截器
- 【C#设计模式-备忘录模式】
- django 从get,post获取数据
- 如何修改eclipse中@author的默认选项
- Quartz Java resuming a job excecutes it many times--转
- 【C语言】单链表的相关热点面试题(包括:从尾到头打印,逆置,冒泡,寻找中间节点,倒数k节点)
- SpringMVC4直接返回String乱码
- 网盘大全, 邮箱大全 good
- Pycharm2016.1.2注册码(python编码利器)
- 修改ftp端口为50021
- Myeclipse打不开,弹出对话框The Myeclipse executable launcher was unable to locate its companion shared library ”
- c语言字符串
- lua面向对象封装及元表(metatable)性能测试 - three_bird的博客 - 博客频道 - CSDN.NET
- java中的匿名内部类总结
- python实现从豌豆荚批量下载样本
- C语言学习-getchar()的作用机制
- 程序与软件、编程与软件开发的区别