Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * Cryptocurrency address validator
- */
- class Premium_ValidateAddress
- {
- public function _valid_btc( $ADDRESS )
- {
- $addr = $this->__decode_base58( $ADDRESS );
- if (strlen($addr) != 50)
- return false;
- $check = substr($addr, 0, strlen($addr) - 8);
- $check = pack("H*", $check);
- $check = strtoupper(hash("sha256", hash("sha256", $check, true)));
- $check = substr($check, 0, 8);
- return $check == substr($addr, strlen($addr) - 8);
- }
- public function _valid_litecoin( $ADDRESS )
- {
- $flag = preg_match('/^[LM3][a-km-zA-HJ-NP-Z1-9]{26,33}$/', $ADDRESS) == 0 ? false : true;
- return $flag;
- }
- public function _valid_eth( $ADDRESS )
- {
- if (!preg_match('/^(0x)?[0-9a-f]{40}$/i',$ADDRESS))
- return false;
- elseif (!preg_match('/^(0x)?[0-9a-f]{40}$/',$ADDRESS) || preg_match('/^(0x)?[0-9A-F]{40}$/',$ADDRESS))
- return true;
- else
- return $this->_valid_checksum( $ADDRESS );
- }
- private function _valid_checksum( $ADDRESS )
- {
- die('btc');
- $address = str_replace('0x','',$ADDRESS );
- $addressHash = hash('sha3',strtolower( $ADDRESS ));
- $addressArray=str_split( $ADDRESS );
- $addressHashArray=str_split($addressHash);
- for($i = 0; $i < 40; $i++ )
- {
- if (
- (intval($addressHashArray[$i], 16) > 7 &&
- strtoupper($addressArray[$i]) !== $addressArray[$i]) ||
- (intval($addressHashArray[$i], 16) <= 7 &&
- strtolower($addressArray[$i]) !== $addressArray[$i])
- )
- return false;
- }
- return true;
- }
- private function __encode_hex( $DEC )
- {
- $hexchars = "0123456789ABCDEF";
- $return = "";
- while (bccomp($DEC, 0) == 1)
- {
- $dv = (string) bcdiv($DEC, "16", 0);
- $rem = (integer) bcmod($DEC, "16");
- $DEC = $dv;
- $return = $return . $hexchars[$rem];
- }
- return strrev($return);
- }
- private function __decode_base58( $BASE )
- {
- $base58chars = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
- $return = "0";
- for ($i = 0; $i < strlen($base58); $i++)
- {
- $current = (string) strpos($base58chars, $base58[$i]);
- $return = (string) bcmul($return, "58", 0);
- $return = (string) bcadd($return, $current, 0);
- }
- $return = $this->__encode_hex($return);
- //leading zeros
- for ($i = 0; $i < strlen($BASE) && $BASE[$i] == "1"; $i++)
- $return = "00" . $return;
- if (strlen($return) % 2 != 0)
- $return = "0" . $return;
- return $return;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement