借助已有EOS账户名,批量随机生成10个EOS帐户名

258 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

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 */