Created
May 22, 2020 09:27
-
-
Save fuyuntt/5ffa02786c4a7030f9dfa8cb3425dca1 to your computer and use it in GitHub Desktop.
根据序列产生不重复的难以找到规律的数字
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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