我是靠谱客的博主 缓慢心情,最近开发中收集的这篇文章主要介绍根据快递单号,生成快递单号,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

/**
* 生成快递单号
*
* @param str
*
第一个快递单号
* @param w
*
递增的个数,或递减的个数
* @param status
*
判断是递增还是递减 1 = 递增 else = 递减
* @param is_EMS
*
判断是否是EMS 1 = 是EMS else = 其他
* @return
*/
public String createExpress(String str, Integer w, Integer status,
Integer is_EMS) {
/* 快递单号转换为字符数组 */
char strs[] = str.toCharArray();
/* map存放每个数字或字符,位置和值 */
Map<String, Object> map = new HashMap<String, Object>();
/* lists存放数字在整个字符当中的位置 */
List<Integer> lists = new ArrayList<Integer>();
for (int i = 0; i < strs.length; i++) {
// 把字符串转换为字符,再调用Character.isDigit(char)方法判断是否是数字,是返回True,否则False
if (Character.isDigit(strs[i])) {
map.put("" + i + "", strs[i]);
lists.add(i);
} else {
map.put("" + i + "", strs[i]);
}
}
StringBuffer hire = new StringBuffer();// 把数字放到hire中
for (Integer integer : lists) {
hire.append(map.get("" + integer + ""));
}
long num = Long.parseLong(hire.toString());
String long_str = null;
if (is_EMS == 1) {
long_str = createEMS(num, w, status);
} else {
if (status == 1) {
long_str = Long.toString(num + w);
} else {
long_str = Long.toString(num - w);
}
}
char long_char[] = long_str.toCharArray();
for (int i = 0; i < lists.size(); i++) {
if(long_char.length == lists.size()){
<span style="white-space:pre">
</span>map.put(""+lists.get(i)+"", long_char[i]);
<span style="white-space:pre">
</span>}else{
<span style="white-space:pre">
</span>if(i<long_char.length){
<span style="white-space:pre">
</span>map.put(""+lists.get(i)+"", long_char[i]);
<span style="white-space:pre">
</span>}else{
<span style="white-space:pre">
</span>map.remove(""+lists.get(i)+"");
<span style="white-space:pre">
</span>}
<span style="white-space:pre">
</span>}
}
hire = new StringBuffer();// 把数字放到hire中
for (int i = 0; i < map.size(); i++) {
hire.append(map.get("" + i + ""));
}
return hire.toString();
}
/**
* 根据EMS规则生成订单号
*
* @param ems
*
去掉前后字符,取中间数字部分
* @param w
*
递增或递减的个数
* @param status
*
判断是递增还是递减
* @return
*/
public String createEMS(long ems, Integer w, Integer status) {
if (status == 1) {
ems = ems + (w * 10);
} else {
ems = ems - (w * 10);
}
String long_str = Long.toString(ems);
String[] long_sp = long_str.split("");
int[] long_int = new int[long_sp.length - 1];
for (int i = 0; i < long_sp.length - 1; i++) {
long_int[i] = Integer.parseInt(long_sp[i + 1]);
}
int X = long_int[0] * 8 + long_int[1] * 6 + long_int[2] * 4
+ long_int[3] * 2 + long_int[4] * 3 + long_int[5] * 5
+ long_int[6] * 9 + long_int[7] * 7;
int Y = X % 11;
int Z = 11 - Y;
if (Z == 10) {
long_int[8] = 0;
} else if (Z == 11) {
long_int[8] = 5;
} else if (Z < 10) {
long_int[8] = Z;
}
/** -------------------- */
StringBuffer long_strBf = new StringBuffer();
for (int i = 0; i < long_int.length; i++) {
long_strBf.append(long_int[i]);
}
return long_strBf.toString();
}

最后

以上就是缓慢心情为你收集整理的根据快递单号,生成快递单号的全部内容,希望文章能够帮你解决根据快递单号,生成快递单号所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部