Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

太坊地址和iban地址之间的转换方法

一杯浓咖啡
162 0 0
简单地说,以太坊中的iban账号是以太坊为了和传统的银行系统对接而引入的概念, web3.js中提供了以太坊地址和iban地址之间的转换方法。iban:国际银行账号
" \' q, P$ i9 V% G3 \1 z5 k4 w; e% w/ P6 K. B. J" g! f
iban这个概念源于传统的银行系统,其英文全称为International Bank Account Number, 即国际银行帐号。iban的作用是为全球任意一家银行中的任意一个账户 生成一个全球唯一的账号,以便进行跨行交易。一个iban账号看起来像这样:9 {3 y* m( w, K9 x
- A, e  Y- J* t2 O* m5 L, f
XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS
4 l5 ~. u$ ~$ {. r4 H2 D/ k  I! r/ @, x- d( j1 L
iban地址最多可以包含34个字母和数字,其中的字母大小写不敏感。在iban 中包含以下信息:/ F5 J4 M& D9 W1 u/ E
5 H: x# T/ @7 C* i9 v$ Y
国别码,用来标识国家,遵循ISO3166-1 alpha-2标准
- P9 o' F$ Y. Q# ^, u* B7 t8 R; Y( s' E0 b+ `
错误识别码,用来对地址进行校验,采用mod-97-10校验和协议,即ISO/IEC 7064:2003标准4 `8 K0 M3 f' u

; L% i9 h* T% B9 L3 @( _' t基本银行账号,即BBAN(Basic Bank Account Number),用来标识银行机构、网点及 客户在该机构内的账号,这三部分信息的编码方案依赖于前面提及的国别码) z" x/ U# T1 o( b+ m  Y

2 v: m( k5 i4 j9 i3 r+ G( b8 W6 D0 Q以太坊iban:新的国别码和BBAN编码方案
; M( r% Z( C$ r9 j$ Y) W% J% Y2 s* V7 l7 M& n' e& U1 e
以太坊引入了一个新的IBAN国别码:XE,其中E代表Ethereum,X代表非法币(non-jurisdictional currencies)。同时,以太坊提出了三种BBAN的编码格式:direct、basic和indirect。. E# i  U1 ~& C

# x5 o' S  c( ?5 D8 zdirect编码方案中的BBAN为30个字母/数字,只有一个字段:账户编号。例如,以太坊 地址00c5496aee77c1ba1f0854206a26dda82a81d6d8转换为direct方案的BBAN账号,就 得到XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS。# s( o( t# Q4 g: _  h

- h# z+ T, V; a- K! U$ d可以使用web3.js中的web3.eth.Iban.fromEthereumAddress() 方法来执行这一转换:7 \4 `  N7 y3 Q, L8 [8 O

' l% }- l3 m* H$ nlet myiban = web3.eth.Iban.fromEthereumAddress('0x00c5496aee77c1ba1f0854206a26dda82a81d6d8')4 M9 Q) n! F/ ^  Z! j' ]: I

- b- t0 [. G/ s7 X2 \2 Sconsole.log(myiban) //XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS
$ i" z$ n4 i+ A4 F7 g7 n- H9 s, t8 V$ k
basic编码方案与direct方案的唯一区别在于,其BBAN长度为31个字母/数字,因此该方案 不兼容IBAN。, d5 G, y! ]5 r( J( G  @

3 ?& M+ `' d8 M4 b8 Z5 p( ]indrect编码方案中的BBAN长度为16个字母/数字,包含三个字段:: h6 [8 f; S: K6 U( ]8 Z
" t3 C" Z! Y; B5 e: p$ p/ L9 s2 w3 H
资产编号,由3个字母/数字组成/ S% Q) J) I# L9 }. L1 C8 K0 t, X. b
" ]4 s' _7 M6 S. t4 r; C
机构编号,由4个字母/数字组成! h9 L8 \6 q; r1 T

. `. _; M+ S  N: [3 S* F/ V机构内客户编号,由9个字母/数字组成5 b1 s. _3 b9 s& I: e

* Y3 P& L$ E# C/ ^& I例如,一个采用indrect编码方案的以太坊iban账号,看起来是这样:
5 V' K, [" H2 ?1 n. v$ p% p. |  O1 q6 x7 G9 }0 p
XE81ETHXREGGAVOFYORK
4 m9 X' Z& m. q9 l* A( R
7 s9 R7 O/ y1 C7 ~' o2 S' ~/ ^前面的XE表示国别码,81为校验和,后面的16个字符就是indrect编码的BBAN,其中:9 K+ e9 U- y6 P
. H  R" B7 ?7 o  ?
ETH:在本例中,表示客户账户内的资产编号。目前ETH是唯一有效的资产编号
8 W! a2 A; n, i3 S$ n
$ p1 t2 f& `1 R; e8 `XREG:机构编号,XREG表示以太坊基本注册合约7 F9 P, Y9 l! I; o! d" U

( o3 U/ ~/ ^$ A0 xGAVOFYORK:机构内客户的编号% n' B7 t' u" K! ?8 _, ]
/ v3 P% w1 O' g% K
iban账号与以太坊地址的转换
, A. d& E- ~% y' E% n' \  G& C  |6 R3 o
如前所述,使用web3.eth.Iban.fromEthereumAddress()方法,可以将一个以太坊地址 转换为direct编码方案的iban账号。与之对应的,可以使用web3.eth.Iban.toAddress方法, 将一个采用direct编码方案的iban账号,转换回以太坊地址。例如:  m7 O# Z! e' p: U3 J  u

' @( J) t. i2 ]2 b. Z  p% wlet myaddr = web3.eth.Iban.toAddress("XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS")0 K* ^. k! Q8 x1 Y, q. p

6 ]0 r1 k4 W6 I; K0 ~$ B$ d6 S! }2 |console.log(myaddr) //0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8
$ x2 L/ J0 `* `4 g; y6 y, [3 t% m% B+ U  o' `
检查iban账号的有效性
9 u" L" o6 W; |: t. @1 _: R) g$ o  V) G
iban账号中的校验和用来帮助核验一个给定字符串是否为有效的iban账号。可以使用 web3.js中的web3.eth.Iban.isValid() 来进行执行校验。例如:
5 E! R! [% s+ E0 @, j
( Y5 }( `( O3 {: elet isValid = web3.eth.Iban.isValid("XE81ETHXREGGAVOFYORK")- n) @6 ]' i% L2 q
: J% {; [. A7 z% S  O
console.log(isValid) // true0 s3 F5 h! G* i4 [
! Z" r9 e* g  \! k$ B
isValid = web3.eth.Iban.isValid("XE82ETHXREGGAVOFYORK")
, ?0 i( a% G4 y
5 K0 _8 n' n/ W: \console.log(isValid) // false,因为校验和无效
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

一杯浓咖啡 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5