以太坊中的国际银行账号iban

简单地说,以太坊中的iban账号是以太坊为了和传统的银行系统对接而引入的概念,web3.js中提供了以太坊地址和iban地址之间的转换方法。

iban:国际银行账号

iban这个概念源于传统的银行系统,其英文全称为International Bank Account Number,即国际银行帐号。iban的作用是为全球任意一家银行中的任意一个账户生成一个全球唯一的账号,以便进行跨行交易。一个iban账号看起来像这样:

XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS 
复制代码

iban地址最多可以包含34个字母和数字,其中的字母大小写不敏感。在iban 中包含以下信息:

  • 国别码,用来标识国家,遵循ISO3166-1 alpha-2标准
  • 错误识别码,用来对地址进行校验,采用mod-97-10校验和协议,即ISO/IEC 7064:2003标准
  • 基本银行账号,即BBAN(Basic Bank Account Number),用来标识银行机构、网点及客户在该机构内的账号,这三部分信息的编码方案依赖于前面提及的国别码

如果你希望马上开始学习以太坊DApp实战开发,推荐两个在线互动教程:

  • 以太坊教程,主要是教授区块链新手入门DApp和智能合约实战开发
  • 以太坊开发,主要是通过node.js、express、ipfs等开发电商平台的实战

以太坊iban:新的国别码和BBAN编码方案

以太坊引入了一个新的IBAN国别码:XE,其中E代表Ethereum,X代表非法币(non-jurisdictional currencies)。同时,以太坊提出了三种BBAN的编码格式:direct、basic和indirect。

direct编码方案中的BBAN为30个字母/数字,只有一个字段:账户编号。例如,以太坊地址00c5496aee77c1ba1f0854206a26dda82a81d6d8转换为direct方案的BBAN账号,就得到XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS

可以使用web3.js中的web3.eth.Iban.fromEthereumAddress() 方法来执行这一转换:

let myiban = 

web3.eth.Iban.fromEthereumAddress('0x00c5496aee77c1ba1f0854206a26dda82a81d6d8')

console.log(myiban) //XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS

复制代码

basic编码方案与direct方案的唯一区别在于,其BBAN长度为31个字母/数字,因此该方案不兼容IBAN。

indrect编码方案中的BBAN长度为16个字母/数字,包含三个字段:

  • 资产编号,由3个字母/数字组成
  • 机构编号,由4个字母/数字组成
  • 机构内客户编号,由9个字母/数字组成

例如,一个采用indrect编码方案的以太坊iban账号,看起来是这样:

XE81ETHXREGGAVOFYORK
复制代码

前面的XE表示国别码,81为校验和,后面的16个字符就是indrect编码的BBAN,其中:

  • ETH:在本例中,表示客户账户内的资产编号。目前ETH是唯一有效的资产编号
  • XREG:机构编号,XREG表示以太坊基本注册合约
  • GAVOFYORK:机构内客户的编号

iban账号与以太坊地址的转换

如前所述,使用web3.eth.Iban.fromEthereumAddress()方法,可以将一个以太坊地址转换为direct编码方案的iban账号。与之对应的,可以使用web3.eth.Iban.toAddress方法,将一个采用direct编码方案的iban账号,转换回以太坊地址。例如:

let myaddr = web3.eth.Iban.toAddress("XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS")
console.log(myaddr) //0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8
复制代码

检查iban账号的有效性

iban账号中的校验和用来帮助核验一个给定字符串是否为有效的iban账号。可以使用web3.js中的web3.eth.Iban.isValid() 来进行执行校验。例如:

let isValid = web3.eth.Iban.isValid("XE81ETHXREGGAVOFYORK")
console.log(isValid) // true
isValid = web3.eth.Iban.isValid("XE82ETHXREGGAVOFYORK")
console.log(isValid) // false,因为校验和无效
复制代码

原文:http://blog.hubwiz.com/2018/06/03/ethereum-iban/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java,可以使用正则表达式和MOD97算法来验证国际银行账号IBAN)。以下是一个示例代,演示如何验证IBAN账号: ```java public class IbanValidator { public static boolean validateIban(String iban) { // 移除IBAN的空格 String cleanedIban = iban.replaceAll(" ", ""); // 验证IBAN格式 if (!cleanedIban.matches("^[A-Z]{2}\\d{2}[A-Z0-9]{1,30}$")) { return false; } // 将IBAN转换为数字字符串 StringBuilder numericIban = new StringBuilder(); for (int i = 0; i < cleanedIban.length(); i++) { char c = cleanedIban.charAt(i); if (Character.isLetter(c)) { numericIban.append(Character.getNumericValue(c - 'A' + 10)); } else { numericIban.append(c); } } // 使用MOD97算法计算校验数字 long remainder = Long.parseLong(numericIban.toString()) % 97; return remainder == 1; } public static void main(String[] args) { String iban = "GB82 WEST 1234 5698 7654 32"; boolean isValid = validateIban(iban); if (isValid) { System.out.println("IBAN验证通过"); } else { System.out.println("IBAN验证失败"); } } } ``` 在上面的示例,我们首先移除IBAN的空格,并使用正则表达式验证IBAN的格式。如果格式不匹配,返回false表示验证失败。然后,我们将IBAN的字母转换为数字,并使用MOD97算法计算校验数字。最后,我们检查计算得到的校验数字是否为1,如果是则返回true表示验证通过,否则返回false表示验证失败。 请注意,这只是一个简单的IBAN验证示例,您可能需要根据特定的国家和银行要求对IBAN进行更复杂的验证。此外,还应该注意使用正式的IBAN验证库或API来处理更复杂的IBAN验证逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值