Java 如何从两个长度为28的唯一字符串生成长度为28的唯一字符串?
我想从两个唯一的字母数字字符串生成长度为28的唯一字母数字字符串。从数学上讲,有可能从两个唯一的字符串中获得无冲突的字符串吗 以下是我所做的Java 如何从两个长度为28的唯一字符串生成长度为28的唯一字符串?,java,security,math,random,uid,Java,Security,Math,Random,Uid,我想从两个唯一的字母数字字符串生成长度为28的唯一字母数字字符串。从数学上讲,有可能从两个唯一的字符串中获得无冲突的字符串吗 以下是我所做的 ASCII_NUMBER_RANGE_START = 48; ASCII_ALPHABET_RANGE_START =55; for (int i = 0; i < firstArray.length; i++) { int tempASCIIValue = (Character.getNumericValue(firstArra
ASCII_NUMBER_RANGE_START = 48;
ASCII_ALPHABET_RANGE_START =55;
for (int i = 0; i < firstArray.length; i++) {
int tempASCIIValue = (Character.getNumericValue(firstArray[i]) + Character.getNumericValue(secondArray[i])) % 35;
if (tempASCIIValue <= 9) {
FINAL_ASCII_VALUE = tempASCIIValue + ASCII_NUMBER_RANGE_START;
} else {
FINAL_ASCII_VALUE = tempASCIIValue + ASCII_ALPHABET_RANGE_START;
}
combinedArray[i] = (char) FINAL_ASCII_VALUE;
}
return new String(combinedArray);
}
ASCII\u编号\u范围\u开始=48;
ASCII字母表范围开始=55;
for(int i=0;i 如果(tempascivalue,您可以使用StringBuilder/StringBuffer添加两个字符串UID(28位字母数字),并将包含的字符串放入的任何实现中。设置的实现将过滤掉重复的元素(如果有)
以下是示例代码:
import java.util.LinkedHashSet;
public class Delete1 {
public static void main(String[] args) {
LinkedHashSet<String> impl=new LinkedHashSet<String>();
for (int i = 0; i < 5; i++) {
String uid1="qwertyuiop1234567890~!@#$%^&";
String uid2="qwertyuiop1234567890~!@#$%^&";
StringBuilder builder=new StringBuilder();
builder.append(uid1);
builder.append(uid2);
impl.add(builder.toString());
}
for (String value : impl) {
System.out.println(value);
}
}
}
您可以添加循环变量来创建唯一id。因为冲突不可避免。我们可以看看哈希代码生成之类的想法。在哈希表中,您希望为每个对象生成哈希代码。理想情况下,您需要一个唯一的id,但这很难实现
您可能可以使用哈希函数,例如,请参见
int generateHashCode(int a,int b) {
// Start with a non-zero constant. Prime is preferred
int result = 17;
// For each field multiply the previous result by a prime and add
result = 31 * result + a;
result = 31 * result + b;
return result;
}
对于您的实现,您可以将其更改为与字符一起使用。如果您愿意丢失一个字符,则每个字符有26+26+9=64种可能性。这意味着您可以为每个字符使用6位,为整个输入使用168位,这可以放入6个整数中。然后只需运行generateHashCode()
方法对每对整数执行。您尝试了什么?比方说,串联(唯一A、唯一B)将始终是唯一的字符串文字。请尝试此链接-您对输入或输出中允许的字符有限制吗?@Salixalba仅输入和输出应为字母数字,我只是担心我的代码会降低结果字符串唯一性的概率,希望您理解。感谢您的努力,我将尝试把它拿出来,让你知道实际上我得到了两个字符串的浓缩,我需要它的长度与父字符串的长度相同。@Sayak,生成的字符串的长度必须为28@tpk,添加字符串(28-2)/2长度,并在两个字符串中添加循环计数以获得唯一id。能否请您在@SayakChoudhury语句中解释更多内容
int generateHashCode(int a,int b) {
// Start with a non-zero constant. Prime is preferred
int result = 17;
// For each field multiply the previous result by a prime and add
result = 31 * result + a;
result = 31 * result + b;
return result;
}