将方法从Java转换为Dart

尼尔酒吧:

我正在尝试将有效的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();
    }
}
jhalitaksoy:

我将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();
}

在DartPad上运行

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章