在处理一些代码库时,我试着理解一段代码以便能够工作和定制它,我能够理解近90%的代码流。这里是整体流程了解一段Java代码
- 码被用来生成15位代码(字母数字),前3位是客户提供。
- 最初代码是生成16位数的字母数字数字并将其存储在缓存中。
- 客户可以通过指定数量生成任意数量的代码。
- 所有客户生成的代码都是从16位数字(点2)生成的。所有生成的代码都有来自该16位数字字母数字的数字/字母。
- 当有人试图使用这些代码时,系统试图验证提供的代码是否有效。
我触击了在用于确定是否所提供的代码是否有效,这里的逻辑是,一段代码,我被生成并存储在生成6个码作为样品,在这种情况下的字母数字代码高速缓存是
initial-alphabet : M9W6K3TENDGSFAL4
代码来生成基于initial-alphabet
是 myList中= [123-MK93-ES6D-36F3, 123-MK93-EFTW-D3LG, 123-MK93-EALK-TGLD, 123-MK93-ELKK-DN6S, 123-MK93-E4D9-3A6T, 123-MK93-EMTW-LNME]
protected int getVoucherNumber(String voucherCode){
int voucherNumberPos = voucherCode.length() - 12;
String voucherNumberHex = voucherCode.substring(voucherNumberPos, voucherNumberPos + 6);
int firstByte = getIntFromHexByte(voucherNumberHex.substring(0, 2), 0);
int secondByte = getIntFromHexByte(voucherNumberHex.substring(2, 4), 1);
int thirdByte = getIntFromHexByte(voucherNumberHex.substring(4, 6), 7);
return firstByte << 16 | secondByte << 8 | thirdByte;
}
private int getIntFromHexByte(String value, int offset){
return (getIntFromHexNibble(value.charAt(0), offset) << 4) + getIntFromHexNibble(value.charAt(1), offset + 4);
}
private int getIntFromHexNibble(char value, int offset){
int pos = getAlphabet().indexOf(value);
if (pos == -1) {// nothing found}
pos -= offset;
while (pos < 0) {
pos += 16;
}
return pos % 16;
}
这里是其试图验证共同的代码德
int voucherNumber = getVoucherNumber(kyList.get(4));
在voucherNumber
这种情况下的值是4
即,从列表中的第四元素,在情况下,我通过这是不列表getVoucherNumber
方法的一部分返回一个较高的值(比表计数值的任何值)。
之一,其困惑我最主要的事情是这两条线
int voucherNumberPos = voucherCode.length() - 12;
String voucherNumberHex = voucherCode.substring(voucherNumberPos, voucherNumberPos + 6);
按我的理解,他们首先移动了从这些客户提供的,但他们又没有使用检查前3位字符串的其余部分,但只是字符串的特定部分。
任何一个可以帮助我了解这个
为什么被标记为java8?此代码示例中是否有关于Java 8的特定内容?我没有看到它,但也许我错过了它... – FrustratedWithFormsDesigner 2014-10-08 18:38:04
@FrustratedWithFormsDesigner:没有任何与java-8相关的,我错误地标记它,谢谢纠正 – 2014-10-09 01:58:25