本文已参与「新人创作礼」活动,一起开启掘金创作之路。
EOS账户名具有辨识率高的特点,一个个申请太麻烦,因此用nodejs脚本批量生成。
过程如下:
var fs = require('fs');
var readline = require('readline');
/*
* 按行读取文件内容
* 返回:字符串数组
* 参数:fReadName:文件名路径
* callback:回调函数
* */
function readFileToArr(fReadName,callback){
var fRead = fs.createReadStream(fReadName);
var objReadline = readline.createInterface({
input:fRead
});
var arr = new Array();
objReadline.on('line',function (line) {
arr.push(line);
//console.log('line:'+ line);
});
objReadline.on('close',function () {
// console.log(arr);
callback(arr);
});
}
// 读取文件内容到数组列表
function readFileToArr(fReadName,startno, readnum, callback){
var fRead = fs.createReadStream(fReadName);
var objReadline = readline.createInterface({
input:fRead
});
var arr = new Array();
var count = 0
objReadline.on('line',function (line) {
count += 1;
if (count>=startno)
{
console.log(line);
arr.push(line);
}
if(arr.length >= readnum)
{
console.log('readnum');
return arr
}
//console.log('line:'+ line);
});
objReadline.on('close',function () {
// console.log(arr);
callback(arr);
});
return arr
}
// 是否合法账户名
function IsValidAccountName(str){
var re=/^[a-z1-5]+$/;
if (str.match(re) == null)
return false;
else
return true;
}
// 获取账号字典中账号 startno:字典中的开始位置,readnum 获取个数
function GetAccountNameArrLine(dataarr, startno, readnum)
{
var linesarr = new Array();
var count = 0
console.log('账号字典中账号总数=' + dataarr.length);
for (i=0;i<dataarr.length ;i++ ) {
{
//console.log(dataarr[i]);
var line = dataarr[i]
if (line.length != 12)
{
//console.log('原账号长度不是12位:' + line);
continue
}
// 忽略带有 . 的账户名
if(line.indexOf(".") > 0 )
{
continue
}
if (IsValidAccountName(line) == true)
{
{
//console.log('readnum');
count += 1;
if (count>=startno)
{
//console.log(line);
linesarr.push(line);
}
if(linesarr.length >= readnum)
{
console.log('已获取账号名数量='+linesarr.length);
break
}
}
}
else
{
//console.log('原账号名非12位字符(普通账号名是26个小写字母和12345数字组成的12个字符):'+line);
}
}
}
return linesarr
}
//生成随机数后缀4位
function randomAccountNamePre(t) {
for (var n = 'abcdefghijklmnopqrstuvwxyz12345', e = '', o = 0; o < t; o++)
e += n.charAt(Math.floor(Math.random() * n.length));
return e
}
// 随机后 randomcharnum 为字符生成账号名列表
function GetMySelfRandomAccountName(accountarr, randomcharnum)
{
var linesarr = new Array();
for (i=0;i<accountarr.length ;i++ ) {
var line = accountarr[i]
var ramdomstr4 = randomAccountNamePre(randomcharnum)
line = line.substr(0, 12-randomcharnum) + ramdomstr4
//console.log(ramdomstr4)
linesarr.push(line)
}
return linesarr
}
// // 以下是代码修改、脚本执行区域 //
// 从排名1万开始,取10个账户名来随机,即随机生成10个账号名。 var data = HelperFunc.ReadFile('eosTop50w.txt') // 排名前50万的账号名字典 var startno = 10000 // 从50万账号中排名1万的开始选取,会自动过滤掉非12位字符的账号。自己修改 var num = 10 // 本次随机生成10个。自己修改 var randomcharnum = 8 // 随机后几个字符,这里是随机后8个字符,即原账号名的前4位字符不变。自己修改
var dataarr = HelperFunc.SplitLineStrToArr(data) var needdataarr = GetAccountNameArrLine(dataarr, startno, num)
//HelperFunc.WriteArrToFile('keyname原始账号名.txt', needdataarr) //保存原始账户名用于参考 var randomeaccount = GetMySelfRandomAccountName(needdataarr, randomcharnum)
console.log('生成的随机账号列表:') console.log(randomeaccount)
var filename = 'keyname'+num.toString()+'.txt' HelperFunc.WriteArrToFile(filename, randomeaccount)
/* 本文件使用一条命令行执行: node 随机生成EOS账号名列表.js */