[ Index ]

PHP Cross Reference of moodle-2.8

title

Body

[close]

/lib/zend/Zend/Validate/ -> Iban.php (source)

   1  <?php
   2  /**
   3   * Zend Framework
   4   *
   5   * LICENSE
   6   *
   7   * This source file is subject to the new BSD license that is bundled
   8   * with this package in the file LICENSE.txt.
   9   * It is also available through the world-wide-web at this URL:
  10   * http://framework.zend.com/license/new-bsd
  11   * If you did not receive a copy of the license and are unable to
  12   * obtain it through the world-wide-web, please send an email
  13   * to [email protected] so we can send you a copy immediately.
  14   *
  15   * @category   Zend
  16   * @package    Zend_Validate
  17   * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
  18   * @license    http://framework.zend.com/license/new-bsd     New BSD License
  19   * @version    $Id$
  20   */
  21  
  22  /**
  23   * @see Zend_Validate_Abstract
  24   */
  25  require_once 'Zend/Validate/Abstract.php';
  26  
  27  /**
  28   * Validates IBAN Numbers (International Bank Account Numbers)
  29   *
  30   * @category   Zend
  31   * @package    Zend_Validate
  32   * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
  33   * @license    http://framework.zend.com/license/new-bsd     New BSD License
  34   */
  35  class Zend_Validate_Iban extends Zend_Validate_Abstract
  36  {
  37      const NOTSUPPORTED = 'ibanNotSupported';
  38      const FALSEFORMAT  = 'ibanFalseFormat';
  39      const CHECKFAILED  = 'ibanCheckFailed';
  40  
  41      /**
  42       * Validation failure message template definitions
  43       *
  44       * @var array
  45       */
  46      protected $_messageTemplates = array(
  47          self::NOTSUPPORTED => "Unknown country within the IBAN '%value%'",
  48          self::FALSEFORMAT  => "'%value%' has a false IBAN format",
  49          self::CHECKFAILED  => "'%value%' has failed the IBAN check",
  50      );
  51  
  52      /**
  53       * Optional locale
  54       *
  55       * @var string|Zend_Locale|null
  56       */
  57      protected $_locale;
  58  
  59      /**
  60       * IBAN regexes by region
  61       *
  62       * @var array
  63       */
  64      protected $_ibanregex = array(
  65          'AD' => '/^AD[0-9]{2}[0-9]{8}[A-Z0-9]{12}$/',
  66          'AT' => '/^AT[0-9]{2}[0-9]{5}[0-9]{11}$/',
  67          'BA' => '/^BA[0-9]{2}[0-9]{6}[0-9]{10}$/',
  68          'BE' => '/^BE[0-9]{2}[0-9]{3}[0-9]{9}$/',
  69          'BG' => '/^BG[0-9]{2}[A-Z]{4}[0-9]{4}[0-9]{2}[A-Z0-9]{8}$/',
  70          'CH' => '/^CH[0-9]{2}[0-9]{5}[A-Z0-9]{12}$/',
  71          'CS' => '/^CS[0-9]{2}[0-9]{3}[0-9]{15}$/',
  72          'CY' => '/^CY[0-9]{2}[0-9]{8}[A-Z0-9]{16}$/',
  73          'CZ' => '/^CZ[0-9]{2}[0-9]{4}[0-9]{16}$/',
  74          'DE' => '/^DE[0-9]{2}[0-9]{8}[0-9]{10}$/',
  75          'DK' => '/^DK[0-9]{2}[0-9]{4}[0-9]{10}$/',
  76          'EE' => '/^EE[0-9]{2}[0-9]{4}[0-9]{12}$/',
  77          'ES' => '/^ES[0-9]{2}[0-9]{8}[0-9]{12}$/',
  78          'FR' => '/^FR[0-9]{2}[0-9]{10}[A-Z0-9]{13}$/',
  79          'FI' => '/^FI[0-9]{2}[0-9]{6}[0-9]{8}$/',
  80          'GB' => '/^GB[0-9]{2}[A-Z]{4}[0-9]{14}$/',
  81          'GI' => '/^GI[0-9]{2}[A-Z]{4}[A-Z0-9]{15}$/',
  82          'GR' => '/^GR[0-9]{2}[0-9]{7}[A-Z0-9]{16}$/',
  83          'HR' => '/^HR[0-9]{2}[0-9]{7}[0-9]{10}$/',
  84          'HU' => '/^HU[0-9]{2}[0-9]{7}[0-9]{1}[0-9]{15}[0-9]{1}$/',
  85          'IE' => '/^IE[0-9]{2}[A-Z0-9]{4}[0-9]{6}[0-9]{8}$/',
  86          'IS' => '/^IS[0-9]{2}[0-9]{4}[0-9]{18}$/',
  87          'IT' => '/^IT[0-9]{2}[A-Z]{1}[0-9]{10}[A-Z0-9]{12}$/',
  88          'LI' => '/^LI[0-9]{2}[0-9]{5}[A-Z0-9]{12}$/',
  89          'LU' => '/^LU[0-9]{2}[0-9]{3}[A-Z0-9]{13}$/',
  90          'LT' => '/^LT[0-9]{2}[0-9]{5}[0-9]{11}$/',
  91          'LV' => '/^LV[0-9]{2}[A-Z]{4}[A-Z0-9]{13}$/',
  92          'MK' => '/^MK[0-9]{2}[A-Z]{3}[A-Z0-9]{10}[0-9]{2}$/',
  93          'MT' => '/^MT[0-9]{2}[A-Z]{4}[0-9]{5}[A-Z0-9]{18}$/',
  94          'NL' => '/^NL[0-9]{2}[A-Z]{4}[0-9]{10}$/',
  95          'NO' => '/^NO[0-9]{2}[0-9]{4}[0-9]{7}$/',
  96          'PL' => '/^PL[0-9]{2}[0-9]{8}[0-9]{16}$/',
  97          'PT' => '/^PT[0-9]{2}[0-9]{8}[0-9]{13}$/',
  98          'RO' => '/^RO[0-9]{2}[A-Z]{4}[A-Z0-9]{16}$/',
  99          'SE' => '/^SE[0-9]{2}[0-9]{3}[0-9]{17}$/',
 100          'SI' => '/^SI[0-9]{2}[0-9]{5}[0-9]{8}[0-9]{2}$/',
 101          'SK' => '/^SK[0-9]{2}[0-9]{4}[0-9]{16}$/',
 102          'TN' => '/^TN[0-9]{2}[0-9]{5}[0-9]{15}$/',
 103          'TR' => '/^TR[0-9]{2}[0-9]{5}[A-Z0-9]{17}$/'
 104      );
 105  
 106      /**
 107       * Sets validator options
 108       *
 109       * @param  string|Zend_Config|Zend_Locale $locale OPTIONAL
 110       * @return void
 111       */
 112      public function __construct($locale = null)
 113      {
 114          if ($locale instanceof Zend_Config) {
 115              $locale = $locale->toArray();
 116          }
 117  
 118          if (is_array($locale)) {
 119              if (array_key_exists('locale', $locale)) {
 120                  $locale = $locale['locale'];
 121              } else {
 122                  $locale = null;
 123              }
 124          }
 125  
 126          if (empty($locale)) {
 127              require_once 'Zend/Registry.php';
 128              if (Zend_Registry::isRegistered('Zend_Locale')) {
 129                  $locale = Zend_Registry::get('Zend_Locale');
 130              }
 131          }
 132  
 133          if ($locale !== null) {
 134              $this->setLocale($locale);
 135          }
 136      }
 137  
 138      /**
 139       * Returns the locale option
 140       *
 141       * @return string|Zend_Locale|null
 142       */
 143      public function getLocale()
 144      {
 145          return $this->_locale;
 146      }
 147  
 148      /**
 149       * Sets the locale option
 150       *
 151       * @param  string|Zend_Locale $locale
 152       * @return Zend_Validate_Date provides a fluent interface
 153       */
 154      public function setLocale($locale = null)
 155      {
 156          if ($locale !== false) {
 157              require_once 'Zend/Locale.php';
 158              $locale = Zend_Locale::findLocale($locale);
 159              if (strlen($locale) < 4) {
 160                  require_once 'Zend/Validate/Exception.php';
 161                  throw new Zend_Validate_Exception('Region must be given for IBAN validation');
 162              }
 163          }
 164  
 165          $this->_locale = $locale;
 166          return $this;
 167      }
 168  
 169      /**
 170       * Defined by Zend_Validate_Interface
 171       *
 172       * Returns true if $value is a valid IBAN
 173       *
 174       * @param  string $value
 175       * @return boolean
 176       */
 177      public function isValid($value)
 178      {
 179          $value = strtoupper($value);
 180          $this->_setValue($value);
 181  
 182          if (empty($this->_locale)) {
 183              $region = substr($value, 0, 2);
 184          } else {
 185              $region = new Zend_Locale($this->_locale);
 186              $region = $region->getRegion();
 187          }
 188  
 189          if (!array_key_exists($region, $this->_ibanregex)) {
 190              $this->_setValue($region);
 191              $this->_error(self::NOTSUPPORTED);
 192              return false;
 193          }
 194  
 195          if (!preg_match($this->_ibanregex[$region], $value)) {
 196              $this->_error(self::FALSEFORMAT);
 197              return false;
 198          }
 199  
 200          $format = substr($value, 4) . substr($value, 0, 4);
 201          $format = str_replace(
 202              array('A',  'B',  'C',  'D',  'E',  'F',  'G',  'H',  'I',  'J',  'K',  'L',  'M',
 203                    'N',  'O',  'P',  'Q',  'R',  'S',  'T',  'U',  'V',  'W',  'X',  'Y',  'Z'),
 204              array('10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22',
 205                    '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35'),
 206              $format);
 207  
 208          $temp = intval(substr($format, 0, 1));
 209          $len  = strlen($format);
 210          for ($x = 1; $x < $len; ++$x) {
 211              $temp *= 10;
 212              $temp += intval(substr($format, $x, 1));
 213              $temp %= 97;
 214          }
 215  
 216          if ($temp != 1) {
 217              $this->_error(self::CHECKFAILED);
 218              return false;
 219          }
 220  
 221          return true;
 222      }
 223  }


Generated: Fri Nov 28 20:29:05 2014 Cross-referenced by PHPXref 0.7.1