这个算法本质就是需要你强制延时,不计算出正确的值接口就会返回失败,所以我叫他延时算法~~
下面图片是调用实例~~
因为易语言写的效率太低了,CPU消耗极高,所以我用GO实现了~~
变量名 | 类 型 | 静态 | 数组 | 备 注 | Json | zyJsonDocument | | | bigx | 大数 | | | bigmod | 大数 | | | t | 整数型 | | | i | 整数型 | | | startTime | 长整数型 | | | minTime | 长整数型 | | | maxTime | 长整数型 | | | nowTime | 长整数型 | | | spendTime | 整数型 | | | count | 整数型 | | | puzzle | 文本型 | | | obj | zyJsonDocument | | | time | 长整数型 | | | res | 文本型 | | |
Json. 解析 (data )t = Json. 取整数 (“result.args.t”)minTime = Json. 取长整数 (“result.minTime”)maxTime = Json. 取长整数 (“result.maxTime”)startTime = 到长整数 (时间_取现行时间戳 ()) puzzle = Json. 取文本 (“result.args.puzzle”) 如果真 (puzzle = “”) Json. 销毁 () 返回 (“”)bigx.导入文本 (十六进制到十进制 (Json.取文本 (“result.args.x”)))bigmod. 导入文本 (十六进制到十进制 (Json. 取文本 (“result.args.mod”)) )nowTime = 到长整数 (时间_取现行时间戳 ()) 判断循环首 (i < t 或 nowTime - startTime < minTime ) bigx = bigx. 乘 (bigx ). 求余 (bigmod ) spendTime = i  count = count + 1  nowTime = 到长整数 (时间_取现行时间戳 ())  如果真 (nowTime - startTime > maxTime ) 跳出循环 () i = i + 1 判断循环尾 ()time = 到长整数 (时间_取现行时间戳 ()) - startTime obj. 创建 ()obj. 置文本 (“source”, “mailUnireg”)obj. 置文本 (“sid”, Json. 取文本 (“result.sid”)) obj. 置整数 (“runTimes”, count )obj. 置整数 (“spendTime”, time )obj. 置文本 (“puzzle”, puzzle )obj. 置文本 (“args.x”, 进制_十到十六Ex (bigx. 导出文本 (), 真)) obj. 置整数 (“args.t”, count )obj. 置整数 (“args.spendTime”, time )res = obj. 到文本 ()obj. 销毁 ()Json. 销毁 ()返回 (res )变量名 | 类 型 | 静态 | 数组 | 备 注 | 循环次数 | 整数型 | | | 代码 | 整数型 | | | 临时1 | 大数 | | | 临时2 | 大数 | | | 结果 | 大数 | | | 乘方 | 大数 | | | 进制 | 大数 | | | 文本 | 文本型 | | |
进制. 导入数字 (16 )文本 = 到小写 (到半角 (十六进制文本 )) 计次循环首 (取文本长度 (文本 ), 循环次数 ) 代码 = 取代码 (取文本中间 (到大写 (文本 ), 取文本长度 (文本 ) - 循环次数 + 1, 1 ), ) 临时1. 导入数字 (代码 - 55 ) 临时2. 导入数字 (代码 - 48 ) 乘方. 导入数字 (1 ) 计次循环首 (循环次数 - 1, )  乘方 = 乘方. 乘 (进制 ) 计次循环尾 () 结果 = 选择 (代码 ≥ 65 且 代码 ≤ 70, 结果. 加 (临时1. 乘 (乘方 )), 结果. 加 (临时2. 乘 (乘方 )) ) 计次循环尾 ()返回 (结果. 导出文本 ()) |
进制_十到十六Ex | 文本型 | | |
十进制文本 | 文本型 | | | | 小写 | 逻辑型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | table | 文本型 | | 0 | bi | 大数 | | | mod_num | 大数 | | | operand | 大数 | | | tmp | 整数型 | | | result | 文本型 | | |
如果 (小写 ) table = { “0”, “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”, “a”, “b”, “c”, “d”, “e”, “f” } table = { “0”, “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”, “A”, “B”, “C”, “D”, “E”, “F” }bi.导入文本 (十进制文本)operand. 导入数字 (16 ) 循环判断首 () 如果 (bi. 小于 (operand ))   mod_num. 导入数字 (bi. 导出整数 ())   bi. 导入数字 (0 )  mod_num = bi. 求余 (operand )  bi = bi. 除 (operand, 0 ) tmp = mod_num.导出整数 () + 1 如果真 (tmp > 16 或 tmp < 1 )  返回 (“”) result = table [tmp] + result 循环判断尾 (bi. 导出文本 () ≠ “0”)返回 (result )
|