我正在尝试将有效的IMEI生成器从java转换为dart,但遇到了问题。我尝试使用在线工具,但它们并没有帮助我。我尝试用dart重写它,但用dart却没有得到任何好的结果:数学无法正常工作...
我想念的是什么?
这是原始的java:
class IMEI {
public static String generateIMEINumber() {
int pos;
int[] str = new int[] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int sum = 0;
int final_digit;
int t;
int len_offset;
int len = 15;
//
// Fill in the first two values of the string based with the specified prefix.
// Reporting Body Identifier list: http://en.wikipedia.org/wiki/Reporting_Body_Identifier
//
String[] rbi = new String[] { "01", "10", "30", "33", "35", "44", "45", "49", "50", "51", "52", "53", "54", "86", "91", "98", "99" };
String[] arr = rbi[((Double) Math.floor(Math.random() * rbi.length)).intValue()].split("(?!^)");
str[0] = Integer.parseInt(arr[0]);
str[1] = Integer.parseInt(arr[1]);
pos = 2;
//
// Fill all the remaining numbers except for the last one with random values.
//
while (pos < len - 1) {
str[pos++] = ((Double) Math.floor(Math.random() * 10)).intValue() % 10;
}
//
// Calculate the Luhn checksum of the values thus far.
//
len_offset = (len + 1) % 2;
for (pos = 0; pos < len - 1; pos++) {
if ((pos + len_offset) % 2 == 1) {
t = str[pos] * 2;
if (t > 9) {
t -= 9;
}
sum += t;
} else {
sum += str[pos];
}
}
//
// Choose the last digit so that it causes the entire string to pass the checksum.
//
final_digit = (10 - (sum % 10)) % 10;
str[len - 1] = final_digit;
return intArrayToStr(str);
}
private static String intArrayToStr(int[] arr) {
if (null == arr || 0 == arr.length) return "";
StringBuilder sb = new StringBuilder(256);
sb.append(arr[0]);
for (int i = 1; i < arr.length; i++) sb.append(arr[i]);
return sb.toString();
}
}
我将Java代码转换为dart。但是由于不起作用而更改了正则表达式。我不确定一切是否正确。
String generateIMEINumber() {
int pos;
var str = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
var sum = 0;
var finalDigit;
var t;
var lenOffset;
var len = 15;
//
// Fill in the first two values of the string based with the specified prefix.
// Reporting Body Identifier list: http://en.wikipedia.org/wiki/Reporting_Body_Identifier
//
var rbi = [
'01',
'10',
'30',
'33',
'35',
'44',
'45',
'49',
'50',
'51',
'52',
'53',
'54',
'86',
'91',
'98',
'99'
];
var exp = RegExp(r'\d');
var str1 = rbi[(Random().nextDouble() * rbi.length).floorToDouble().toInt()];
var arr = exp.allMatches(str1).map((e) => e.group(0)).toList();
str[0] = int.parse(arr[0]);
str[1] = int.parse(arr[1]);
pos = 2;
//
// Fill all the remaining numbers except for the last one with random values.
//
while (pos < len - 1) {
str[pos++] = (Random().nextDouble() * 10).floorToDouble().toInt() % 10;
}
//
// Calculate the Luhn checksum of the values thus far.
//
lenOffset = (len + 1) % 2;
for (pos = 0; pos < len - 1; pos++) {
if ((pos + lenOffset) % 2 == 1) {
t = str[pos] * 2;
if (t > 9) {
t -= 9;
}
sum += t;
} else {
sum += str[pos];
}
}
//
// Choose the last digit so that it causes the entire string to pass the checksum.
//
finalDigit = (10 - (sum % 10)) % 10;
str[len - 1] = finalDigit;
return intArrayToStr(str);
}
String intArrayToStr(List<int> arr) {
if (null == arr || arr.isEmpty) return '';
var buffer = StringBuffer();
buffer.write(arr[0]);
for (var i = 1; i < arr.length; i++) {
buffer.write(arr[i]);
}
return buffer.toString();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句