当前位置: 首页 > article >正文

【Flutter】【WEB3】判断一个String是不是钱包地址

前言

判断一个字符串是否是区块链地址,主要取决于它对应的区块链类型。不同的区块链有不同的地址格式,例如:

  • 👉🏻 Ethereum(ETH)地址:42 个字符,以 0x 开头,后面是 40 位十六进制字符。
  • 👉🏻 Bitcoin(BTC)地址:长度
    26-35 之间,可能以 1、3、bc1 开头。
  • 👉🏻 Solana(SOL)地址:基于 Base58,通常 43-44 个字符。
  • 👉🏻 TRON(TRX)地址:以 T 开头,Base58 编码。

代码实现


extension BlockchainValidator on String {

  /// 判断是否是以太坊地址(ETH)
  bool get isEthereumAddress {
    final ethRegExp = RegExp(r'^0x[a-fA-F0-9]{40}$');
    return ethRegExp.hasMatch(this);
  }

  /// 判断是否是比特币地址(BTC)
  bool get isBitcoinAddress {
    final btcRegExp = RegExp(r'^(1|3|bc1)[a-zA-HJ-NP-Z0-9]{25,39}$');
    return btcRegExp.hasMatch(this);
  }

  /// 判断是否是 Solana 地址(SOL)
  bool get isSolanaAddress {
    final solRegExp = RegExp(r'^[1-9A-HJ-NP-Za-km-z]{32,44}$');
    return solRegExp.hasMatch(this);
  }

  /// 判断是否是 TRON 地址(TRX)
  bool get isTronAddress {
    final tronRegExp = RegExp(r'^T[a-zA-HJ-NP-Z0-9]{33}$');
    return tronRegExp.hasMatch(this);
  }

  /// 通用方法:检查一个地址属于哪种区块链
  bool get isBlockchainAddress {
    return isEthereumAddress || isBitcoinAddress || isSolanaAddress || isTronAddress;
  }

}

使用事例:

final String result = await Get.toNamed(RouterManifest.walletScanPage);
if (result.isBlockchainAddress) {
	 _paymentAddressController?.text = result;
} else {
	_paymentAddressController?.text = "";
	toastError("不是有效的钱包地址");
}

结论

  • ✅ 以太坊(ETH):0x 开头,后面 40 个十六进制字符
  • ✅ 比特币(BTC):以 1、3 或 bc1 开头,长度 26-39 之间
  • ✅ Solana(SOL):Base58 编码,长度 32-44
  • ✅ TRON(TRX):T 开头,后面 33 个 Base58 编码字符

http://www.kler.cn/a/535056.html

相关文章:

  • 蓝桥杯之c++入门(六)【string(practice)】
  • 109,【1】攻防世界 web 题目名称-文件包含
  • GGML、GGUF、GPTQ 都是啥?
  • LeetCode Java面试刷题笔记汇总
  • ASP.NET Core 中使用依赖注入 (DI) 容器获取并执行自定义服务
  • 基于Springboot+vue的租车网站系统
  • Linux——基础命令1
  • 线程同步时定义 std::mutex 为什么要在前面添加 mutable 关键字
  • 旋转变压器工作及解调原理
  • Vue3-管理状态 effectScope
  • OpenAI向所有用户开放ChatGPT搜索,无需账号登录
  • 网络工程师 (20)计算机网络的概念
  • [SAP ABAP] 面向对象程序设计-构造方法
  • SpringCloud基础 入门级 学习SpringCloud 超详细(简单通俗易懂)
  • 为什么使用springboot框架,springboot常用的配置文件,如何读取配置文件中自定义的内容,多环境下如何切换配置文件,包扫描原理,自动装配的原理
  • 变压器-000000
  • Android性能调优之需要掌握Dalvik和ART的知识
  • win编译openssl
  • 前部分知识复习05
  • 机器学习大模型问题记录
  • ESP-Skainet智能语音助手,ESP32-S3物联网方案,设备高效语音交互
  • 《图解设计模式》笔记(五)一致性
  • nuxt3中使用useFetch请求刷新不返回数据或返回html结构问题解决-完整nuxt3useFetchtch请求封装
  • [NKU]C++安装环境 VScode
  • C++的 I/O 流
  • CentOS 6.5编译Rsyslog 8.1903.0