Skip to content

Instantly share code, notes, and snippets.

@fuyuntt
Created May 22, 2020 09:27
Show Gist options
  • Save fuyuntt/5ffa02786c4a7030f9dfa8cb3425dca1 to your computer and use it in GitHub Desktop.
Save fuyuntt/5ffa02786c4a7030f9dfa8cb3425dca1 to your computer and use it in GitHub Desktop.
根据序列产生不重复的难以找到规律的数字
package com.best.buc.base.manager.serialnum.generator.seq;
import org.apache.commons.lang.ArrayUtils;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
/**
* @author Fu Yun
*/
class NumberMixer {
private final int[] mixArr;
public NumberMixer() {
List<Integer> list = IntStream.range(0, 10).boxed().collect(Collectors.toList());
Collections.shuffle(list);
mixArr = list.stream().mapToInt(Integer::intValue).toArray();
}
public NumberMixer(String mixArrStr) {
mixArr = new int[10];
for (int i = 0; i < mixArrStr.length(); i++) {
mixArr[i] = mixArrStr.charAt(i) - '0';
}
}
/**
* 获取混淆数组
* @return 混淆数组
*/
public String getMixArr() {
StringBuilder sb = new StringBuilder();
for (int i : mixArr) {
sb.append((char) (i + '0'));
}
return sb.toString();
}
/**
* 混淆原始的数字,使产生的数字很难看出规律
* @param original 数字字符串 eg: "32663"
* @return 混淆后的字符串
*/
public String mix(String original) {
char[] chars = original.toCharArray();
ArrayUtils.reverse(chars);
int pre = 0;
for (int i = 0; i < chars.length; i++) {
int num = chars[i] - '0';
int res = (num + pre) % 10;
res = mixArr[res];
pre = res;
chars[i] = (char) (res + '0');
}
return String.valueOf(chars);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment