效率好,10万个只需要15毫秒左右,支持跳数生成
可用该方法生成34进制,26进制等数
/ * 自行去掉日志打印会更快 * @param startMac 开始的mac * @param skipNum 跳数 * @param howMany 生成多少个 */ private static void generateMacs(String startMac,int skipNum,int howMany){ long startTime = System.currentTimeMillis(); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(startMac).append("\n"); String newMac ; String oldMac = startMac; for(int i = 0; i< howMany; i++){ newMac = generateMacsAddress(oldMac,skipNum); stringBuilder.append(newMac).append("\n"); oldMac = newMac; } long usedTime = System.currentTimeMillis() - startTime; System.out.println(stringBuilder); System.out.println("用时 : "+usedTime + " ms"); }
讯享网
代码分开写时因为下面的方法其他地方也可以用到(例如每增加一个mac,就去读U盘的文件),分开写可以物尽其用
讯享网 / * mac生成器 * @param frontMac 前置mac,根据前置mac生成下一个mac地址 * @param skipNum 跳数,每跳几个mac生成,跳数为0时为顺序生成, * 跳数为1时,则跳过一个再生成,如frontMac为00:00:00:00:00:01 ,skipNum = 1,则生成的mac为00:00:00:00:00:03 */ private static String generateMacsAddress(String frontMac,int skipNum){ char[] arr = frontMac.toCharArray(); char[] letters = new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; int remainder = skipNum + 1; for(int m = arr.length-1; m>=0; m--){ if(arr[m] == ':') continue; int index = getArrIndex(arr[m],letters); index = index + remainder; if(index >= letters.length){ remainder = index / letters.length; index = index % letters.length; arr[m] = letters[index]; }else{ arr[m] = letters[index]; break; } } return String.valueOf(arr); }
private static int getArrIndex(char ch,char[] letters){ int i = 0; for (char let:letters) { if(let == ch) return i; i++; } return 0; }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/44627.html