Bitcoin/address validation: Difference between revisions

Content added Content deleted
(add Factor)
(→‎{{header|Factor}}: use map-reduce instead of map and reduce)
Line 448: Line 448:
CONSTANT: ALPHABET "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
CONSTANT: ALPHABET "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"


: base58-digits ( str -- digits ) [ ALPHABET index ] { } map-as ;
: base58>bigint ( digits -- n )
[ ALPHABET index ]
[ [ 58 * ] [ + ] bi* ] map-reduce ;


: digits58>bigint ( digits -- n ) 0 [ [ 58 * ] [ + ] bi* ] reduce ;
: base58> ( str -- n ) base58>bigint 25 >be ;

: base58> ( str -- n ) base58-digits digits58>bigint 25 >be ;


: btc-checksum ( bytes -- checksum-bytes )
: btc-checksum ( bytes -- checksum-bytes )
Line 466: Line 466:
"1ANNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62i" btc-valid? . ! f, data changed, original checksum.
"1ANNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62i" btc-valid? . ! f, data changed, original checksum.
</pre>
</pre>

=={{header|FreeBASIC}}==
=={{header|FreeBASIC}}==
<lang freebasic>' version 05-04-2017
<lang freebasic>' version 05-04-2017