public class CustomEncrypt{

    public static void main( String[] args ) {
/*
* c#给的正确测试用例: id=>mid
* 991135225=>001B4Lk5
* 981411932=>001A5Vj6
* 988914785=>001ABp8R
* 97879005=>0009x3GJ
*
* 981612013=>001A6Lmd
*
* 97949621=>0009xm3H
*
* 97919383=>0009xebZ
*
* 984113004=>001AhfYM
*
* 986013809=>001ApesV
*
* 97416233=>0009v7iF
*
* 9090103=>C8Kz
*
* 9194277359=>00ePhWJF
* 96521442=>0009rmwy
*/ String ids = "9734249,981411932,988914785,97879005,981612013,97949621,97919383,984113004,986013809,97416233,9090103,9194277359,96521442";
for(String id : ids.split( "," )){
String mid = idToMid(id);
System.out.println("mid:"+mid);
System.out.println("id:"+midToId(mid));
} } // / <summary>
// / The str62keys
// / </summary>
private static String str62keys = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; // / <summary>
// / 将Mid转换为Id
// / </summary>
// / <param name="str62">The STR62.</param>
// / <returns>System.String.</returns>
public static String midToId( String str62 ) {
String id = "";
// 从最后往前以4字节为一组读取字符
for ( int i = str62.length( ) - 4; i > -4; i = i - 4 ) {
int offset = i < 0 ? 0 : i;
int len = i < 0 ? str62.length( ) % 4 : 4;
long encode = encode62ToInt( left( str62, offset, len ) );
String str = String.valueOf( encode );
if ( offset > 0 )
str = leftPad( str, 7, '0' ); // 若不是第一组,则不足7位补0
id = str + id;
}
return id;
} // / <summary>
// / 将Id转制为Mid
// / </summary>
// / <param name="mid">The mid.</param>
// / <returns>System.String.</returns>
public static String idToMid( String mid ) { // long int_mid = long.Parse(mid);
String result = "";
for ( int i = mid.length( ) - 7; i > -7; i -= 7 ) {
int offset1 = ( i < 0 ) ? 0 : i;
int offset2 = i + 7;
String num = intToEnode62( left( mid, offset1, offset2 - offset1 ) );
result = num + result;
}
return result;
} // / <summary>
// / Ints to enode62.
// / </summary>
// / <param name="mid">The mid.</param>
// / <returns>System.String.</returns>
private static String intToEnode62( String mid ) {
long int_mid = Long.parseLong( mid );
String result = "";
do {
long a = int_mid % 62;
result = str62keys.charAt( ( int ) a ) + result;
int_mid = ( int_mid - a ) / 62;
} while ( int_mid > 0 ); return leftPad( result, 4, '0' );
} // / <summary>
// / Encode62s to int.
// / </summary>
// / <param name="str62">The STR62.</param>
// / <returns>System.Int64.</returns>
private static long encode62ToInt( String str62 ) {
long i10 = 0; for ( int i = 0; i < str62.length( ); i++ ) {
double n = str62.length( ) - i - 1;
i10 += str62keys.indexOf( str62.charAt( i ) ) * Math.pow( 62, n );
}
String temp = leftPad( String.valueOf( i10 ), 7, '0' );
// Long.TryParse(temp, out i10);
try {
i10 = Long.parseLong( temp );
} catch ( Exception e ) {
// TODO: handle exception
} finally {
return i10;
}
} // 左边补
public static String leftPad( String s, int size, char padChar ) {
int length = s.length( );
if ( length == 0 ) {
return s;
}
int pads = size - length;
if ( pads <= 0 ) {
return s;
}
return padding( pads, padChar ).concat( s );
} // 填充
private static String padding( int repeat, char padChar ) {
if ( repeat < 0 ) {
throw new IndexOutOfBoundsException( "Cannot pad a negative amount: " + repeat );
}
char[] buf = new char[ repeat ];
for ( int i = 0; i < buf.length; i++ ) {
buf[ i ] = padChar;
}
return new String( buf );
} /**
* 左起截取字符串
*
* @param s
* @param len
* @return
*/
public static String left( String s, int begin, int len ) {
int length = length( s );
if ( length <= len ) {
return s;
}
return s.substring( begin, begin > 0 ? begin + len : len );
} /**
* 长度
*
* @param s
* @return
*/
public static int length( String s ) {
return s != null ? s.length( ) : 0;
} }

java的长字符串转化为短字符串的更多相关文章

  1. PHP实现新浪长链接转化成短链接API

    我们经常收到类似于这样的短信(如下图),发现其中的链接并不是常规的网址链接,而是个短小精悍的短链接,产品中经常需要这样的需求,如果在给用户下发的短信中是一个很长的连接,用户体验肯定很差,因此我们需要实 ...

  2. java 读取图片并转化为二进制字符串

    本例子的目的在于测试往oracle数据库中插入blob字段 //以下代码源于:https://www.cnblogs.com/ywlx/p/4544179.html public static Str ...

  3. PHP基础语法: echo,var_dump, 常用函数:随机数:拆分字符串:explode()、rand()、日期时间:time()、字符串转化为时间戳:strtotime()可变参数的函数:PHP里数组长度表示方法:count($attr[指数组]);字符串长度:strlen($a)

    PHP语言原理:先把代码显示在源代码中,再通过浏览器解析在网页上 a. 1.substr;  //用于输出字符串中,需要的某一部分 <?PHP $a="learn php"; ...

  4. oc 之中的 汉字字符串转化成为拼音 汉字字符串的排序

    在oc 之中的字符串为汉字的时候,我们经常要进行字符串比較,可是汉字不能比較,所以就要将汉字转化成为拼音,详细步骤例如以下: //可变字符串 必须是可变字符串.     NSMutableString ...

  5. 【字符串处理算法】字符串包括的算法设计及C代码实现

    一.需求描写叙述 给定一个长字符串和一个短字符串.编敲代码推断短字符串中的全部字符是否都在长字符串中.假设是,则长字符串包括短字符串:反之,不包括. 为了尽量包括大多数情况,字符串中能够包括大写和小写 ...

  6. java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串

    java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串 package com.zdz.test; im ...

  7. 使用List把一个长字符串分解成若干个短字符串

    把一个长字符串分解成若干个固定长度的短字符串,由于事先不知道长字符串的长度,以及短字符串的数量,只能使用List. public static void get_list_sbody(String s ...

  8. Java把长整型时间转成字符串日期

    数据库里存放的是timestamp格式,前端取得后是这种:1436255550710长整型时间截转换成"2015-07-07"这种格式呢? import java.io.IOExc ...

  9. TSQL:判断某较短字符串在较长字符串中出现的次数。

    给定一个较短字符串shortStr='ab',和一个较长字符串longStr='adkdabkwelabwkereabrsdweo2342ablk234lksdfsdf1abe': 判断shortSt ...

随机推荐

  1. 38-最长公共子序列(dp)

    最长公共子序列 https://www.nowcoder.com/practice/c996bbb77dd447d681ec6907ccfb488a?tpId=49&&tqId=293 ...

  2. 基于 EntityFramework 的数据库主从读写分离架构 - 目录

    基于 EntityFramework 的数据库主从读写分离架构       回到目录,完整代码请查看(https://github.com/cjw0511/NDF.Infrastructure)中的目 ...

  3. coordinatewise 是什么意思?

    As far as I remember, in the context of optimization, "coordinate wise" means that you are ...

  4. Linux下chmod 777 修改权限

    在linux操作系统下,使用shell命令来操作: 关于权限的问题用chmod命令来修改权限 -rw-r-r-- 1 root root 可参考:http://zhidao.baidu.com/lin ...

  5. C# 将一个DataTable的结构直接复制到另一个DataTable

    DataTable.Clone();//仅复制表结构DataTable.Copy();//复制表结构及数据 DataTable.ImportRow(DataRow);//复制行数据到新表 DataRo ...

  6. Python开发 第一篇 python的前世今生

    Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC ...

  7. 编写高质量代码改善C#程序的157个建议——建议22:确保集合的线程安全

    建议22:确保集合的线程安全 集合线程安全是指多个线程上添加或删除元素时,线程键必须保持同步. 下面代码模拟了一个线程在迭代过程中,另一个线程对元素进行了删除. class Program { sta ...

  8. 【留用】C#的一些好的书籍

    浏览博客的时候发现一篇推荐的C#书籍,感觉真的不错,涉略过几本,水平问题,没看的很深入,正在努力,留用了!!! http://www.cnblogs.com/tongming/p/3879752.ht ...

  9. Microsoft.Office.Interop.Word.DocumentClass.SaveAs 命令失败

    asp.net 常用的生成word功能,代码也是网上常见的,自己本地反复测试过没问题.serves 2003下运行没问题,可是发布到2008上就出错.组件权限已配置,windows目录下temp权限已 ...

  10. NPOI 2.1.3.1导入Excel

    引入NPOI 2.1.3.1的包 项目引入 using NPOI.XSSF.UserModel;using NPOI.SS.UserModel; 控制器方法: public ActionResult ...