求助如何用js或者jqurey实现判断比特币地址是否合法,有效

我想在页面中加一段判断有效的模块,验证比特币地址是否有效,比如位数,是否合加密规则等,网上找的都是python之类
最新回答
超级无敌掌门狗

2024-04-17 02:59:23

位数什么的,都可以用长度直接判断,关键字可以用正则来对比。比特币校验应该是有公式的,你找到公式,把字符串放进去运算一下,看看是否符合规则即可
不期而遇的温暖

2024-04-17 20:47:51

下面是 BTC 地址 js 验证方法,截止到 2020 年。

地址规则:

  1. 1 开头的地址,是 P2PKH(pay-to-public-key-hash) 地址,也就是最原始的地址,称之为普通的BTC地址,地址长度 26 ~ 34 位;

  2. 3 开头的地址,是 P2SH(pay-to-script-hash)地址,内部也需要是 segwit,即隔离见证地址,地址长度 34 位;

  3. bc1 开头的地址,是 BECH32 编码的地址,是专为 segwit 开发的地址格式,也是隔离见证地址,开头的地址长度大于 34 ~ 42 位。

  4. 比特币(Bitcoin)钱包地址使用 Base58 编码,Base58 包含了阿拉伯数字、小写英文字母,大写英文字母。

解决办法:

// sValidAddress_BTC (string) 返回 true 为合法 BTC 交易地址

function IsValidAddress_BTC (string) {

      var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';

      var ALPHABET_MAP = {};

      for (var i = 0; i < ALPHABET.length; ++i) {

        ALPHABET_MAP[ALPHABET.charAt(i)] = i;

      }

      var BASE = string.length;


      if (string.length === 0) return false;


      for (var i = 0; i < string.length; ++i) {

        var c = string[i];

        if (!(c in ALPHABET_MAP)) return false;

      }

      if (string.length >= 26) {

        // deal with leading number

        if (string[0] === "1" && BASE >= 26 && BASE <= 34) return true;

        if (string[0] === "3" && BASE == 34) return true;

        if (string.substring(0, 3) === 'bc1' && BASE >= 34 ) return true;

      } else {

        return false

      }

    }