diff --git a/README.md b/README.md index b8a2fd4..f279ac0 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ This package can be used to: Install with composer: ```console -composer require biblys/isbn:^2.1.3 +composer require biblys/isbn:^2.1.4 ``` ## Usage diff --git a/composer.json b/composer.json index a18e2e0..f8d95c1 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "name": "biblys/isbn", "description": "A PHP library to convert and validate ISBNs & EANs", - "time": "2020-01-09", + "time": "2020-02-28", "keywords": [ "ISBN", "EAN", diff --git a/src/Biblys/Isbn/Isbn.php b/src/Biblys/Isbn/Isbn.php index 53950a1..6f4a8a0 100644 --- a/src/Biblys/Isbn/Isbn.php +++ b/src/Biblys/Isbn/Isbn.php @@ -52,29 +52,35 @@ class Isbn public function __construct($code = null) { - if (!empty($code)) { - $this->_input = $code; + $this->_input = $code; - // Remove hyphens and check characters - $code = $this->removeHyphens($code); - - // Remove checksum and check length - $code = $this->removeChecksum($code); + // If input is empty + if (empty($code)) { + $this->addError(static::ERROR_EMPTY); + $this->setValid(false); + return; + } - if ($this->isValid()) { - // Remove (and set) product code - $code = $this->removeProductCode($code); + // Remove hyphens and check characters + $code = $this->removeHyphens($code); - // Remove (and save) country code - $code = $this->removeCountryCode($code); + // Remove checksum and check length + $code = $this->removeChecksum($code); - // Remove (and save) publisher code - $this->removePublisherCode($code); - } - } else { - $this->addError(static::ERROR_EMPTY); + // At that point, code should be digits only + if (!is_numeric($code)) { $this->setValid(false); + $this->addError(static::ERROR_INVALID_CHARACTERS); } + + // Remove (and save) product code + $code = $this->removeProductCode($code); + + // Remove (and save) country code + $code = $this->removeCountryCode($code); + + // Remove (and save) publisher code + $this->removePublisherCode($code); } /** @@ -156,14 +162,6 @@ private function removeHyphens($code) $replacements = array('-','_',' '); $code = str_replace($replacements, '', $code); - // Check for unwanted characters - if (!is_numeric($code) - && !(is_numeric(substr($code, 0, -1)) - && strtoupper(substr($code, -1)) == 'X')) { - $this->setValid(false); - $this->addError(static::ERROR_INVALID_CHARACTERS); - } - return $code; } diff --git a/src/Biblys/Isbn/ranges-array.php b/src/Biblys/Isbn/ranges-array.php index cb47e48..5072250 100644 --- a/src/Biblys/Isbn/ranges-array.php +++ b/src/Biblys/Isbn/ranges-array.php @@ -1584,22 +1584,22 @@ ), 5 => array ( - 'Range' => '8000000-8169999', + 'Range' => '8000000-8182499', 'Length' => '5', ), 6 => array ( - 'Range' => '8170000-8999999', + 'Range' => '8182500-8999999', 'Length' => '0', ), 7 => array ( - 'Range' => '9000000-9021999', + 'Range' => '9000000-9024499', 'Length' => '6', ), 8 => array ( - 'Range' => '9022000-9999999', + 'Range' => '9024500-9999999', 'Length' => '0', ), ), @@ -4347,6 +4347,47 @@ ), ), 88 => + array ( + 'Prefix' => '978-9915', + 'Agency' => 'Uruguay', + 'Rules' => + array ( + 'Rule' => + array ( + 0 => + array ( + 'Range' => '0000000-3999999', + 'Length' => '0', + ), + 1 => + array ( + 'Range' => '4000000-5999999', + 'Length' => '2', + ), + 2 => + array ( + 'Range' => '6000000-6499999', + 'Length' => '0', + ), + 3 => + array ( + 'Range' => '6500000-7999999', + 'Length' => '3', + ), + 4 => + array ( + 'Range' => '8000000-9299999', + 'Length' => '0', + ), + 5 => + array ( + 'Range' => '9300000-9999999', + 'Length' => '4', + ), + ), + ), + ), + 89 => array ( 'Prefix' => '978-9916', 'Agency' => 'Estonia', @@ -4392,7 +4433,7 @@ ), ), ), - 89 => + 90 => array ( 'Prefix' => '978-9917', 'Agency' => 'Bolivia', @@ -4438,7 +4479,7 @@ ), ), ), - 90 => + 91 => array ( 'Prefix' => '978-9918', 'Agency' => 'Malta', @@ -4484,7 +4525,7 @@ ), ), ), - 91 => + 92 => array ( 'Prefix' => '978-9919', 'Agency' => 'Mongolia', @@ -4525,7 +4566,7 @@ ), ), ), - 92 => + 93 => array ( 'Prefix' => '978-9920', 'Agency' => 'Morocco', @@ -4566,7 +4607,7 @@ ), ), ), - 93 => + 94 => array ( 'Prefix' => '978-9921', 'Agency' => 'Kuwait', @@ -4612,7 +4653,7 @@ ), ), ), - 94 => + 95 => array ( 'Prefix' => '978-9922', 'Agency' => 'Iraq', @@ -4653,7 +4694,7 @@ ), ), ), - 95 => + 96 => array ( 'Prefix' => '978-9923', 'Agency' => 'Jordan', @@ -4694,7 +4735,7 @@ ), ), ), - 96 => + 97 => array ( 'Prefix' => '978-9924', 'Agency' => 'Cambodia', @@ -4735,7 +4776,7 @@ ), ), ), - 97 => + 98 => array ( 'Prefix' => '978-9925', 'Agency' => 'Cyprus', @@ -4766,7 +4807,7 @@ ), ), ), - 98 => + 99 => array ( 'Prefix' => '978-9926', 'Agency' => 'Bosnia and Herzegovina', @@ -4797,7 +4838,7 @@ ), ), ), - 99 => + 100 => array ( 'Prefix' => '978-9927', 'Agency' => 'Qatar', @@ -4828,7 +4869,7 @@ ), ), ), - 100 => + 101 => array ( 'Prefix' => '978-9928', 'Agency' => 'Albania', @@ -4859,7 +4900,7 @@ ), ), ), - 101 => + 102 => array ( 'Prefix' => '978-9929', 'Agency' => 'Guatemala', @@ -4890,7 +4931,7 @@ ), ), ), - 102 => + 103 => array ( 'Prefix' => '978-9930', 'Agency' => 'Costa Rica', @@ -4916,7 +4957,7 @@ ), ), ), - 103 => + 104 => array ( 'Prefix' => '978-9931', 'Agency' => 'Algeria', @@ -4942,7 +4983,7 @@ ), ), ), - 104 => + 105 => array ( 'Prefix' => '978-9932', 'Agency' => 'Lao People\'s Democratic Republic', @@ -4968,7 +5009,7 @@ ), ), ), - 105 => + 106 => array ( 'Prefix' => '978-9933', 'Agency' => 'Syria', @@ -4999,7 +5040,7 @@ ), ), ), - 106 => + 107 => array ( 'Prefix' => '978-9934', 'Agency' => 'Latvia', @@ -5030,7 +5071,7 @@ ), ), ), - 107 => + 108 => array ( 'Prefix' => '978-9935', 'Agency' => 'Iceland', @@ -5061,7 +5102,7 @@ ), ), ), - 108 => + 109 => array ( 'Prefix' => '978-9936', 'Agency' => 'Afghanistan', @@ -5092,7 +5133,7 @@ ), ), ), - 109 => + 110 => array ( 'Prefix' => '978-9937', 'Agency' => 'Nepal', @@ -5123,7 +5164,7 @@ ), ), ), - 110 => + 111 => array ( 'Prefix' => '978-9938', 'Agency' => 'Tunisia', @@ -5149,7 +5190,7 @@ ), ), ), - 111 => + 112 => array ( 'Prefix' => '978-9939', 'Agency' => 'Armenia', @@ -5185,7 +5226,7 @@ ), ), ), - 112 => + 113 => array ( 'Prefix' => '978-9940', 'Agency' => 'Montenegro', @@ -5226,7 +5267,7 @@ ), ), ), - 113 => + 114 => array ( 'Prefix' => '978-9941', 'Agency' => 'Georgia', @@ -5262,7 +5303,7 @@ ), ), ), - 114 => + 115 => array ( 'Prefix' => '978-9942', 'Agency' => 'Ecuador', @@ -5298,7 +5339,7 @@ ), ), ), - 115 => + 116 => array ( 'Prefix' => '978-9943', 'Agency' => 'Uzbekistan', @@ -5329,7 +5370,7 @@ ), ), ), - 116 => + 117 => array ( 'Prefix' => '978-9944', 'Agency' => 'Turkey', @@ -5375,7 +5416,7 @@ ), ), ), - 117 => + 118 => array ( 'Prefix' => '978-9945', 'Agency' => 'Dominican Republic', @@ -5421,7 +5462,7 @@ ), ), ), - 118 => + 119 => array ( 'Prefix' => '978-9946', 'Agency' => 'Korea, P.D.R.', @@ -5452,7 +5493,7 @@ ), ), ), - 119 => + 120 => array ( 'Prefix' => '978-9947', 'Agency' => 'Algeria', @@ -5478,7 +5519,7 @@ ), ), ), - 120 => + 121 => array ( 'Prefix' => '978-9948', 'Agency' => 'United Arab Emirates', @@ -5504,7 +5545,7 @@ ), ), ), - 121 => + 122 => array ( 'Prefix' => '978-9949', 'Agency' => 'Estonia', @@ -5555,7 +5596,7 @@ ), ), ), - 122 => + 123 => array ( 'Prefix' => '978-9950', 'Agency' => 'Palestine', @@ -5581,7 +5622,7 @@ ), ), ), - 123 => + 124 => array ( 'Prefix' => '978-9951', 'Agency' => 'Kosova', @@ -5607,7 +5648,7 @@ ), ), ), - 124 => + 125 => array ( 'Prefix' => '978-9952', 'Agency' => 'Azerbaijan', @@ -5638,7 +5679,7 @@ ), ), ), - 125 => + 126 => array ( 'Prefix' => '978-9953', 'Agency' => 'Lebanon', @@ -5684,7 +5725,7 @@ ), ), ), - 126 => + 127 => array ( 'Prefix' => '978-9954', 'Agency' => 'Morocco', @@ -5720,7 +5761,7 @@ ), ), ), - 127 => + 128 => array ( 'Prefix' => '978-9955', 'Agency' => 'Lithuania', @@ -5746,7 +5787,7 @@ ), ), ), - 128 => + 129 => array ( 'Prefix' => '978-9956', 'Agency' => 'Cameroon', @@ -5777,7 +5818,7 @@ ), ), ), - 129 => + 130 => array ( 'Prefix' => '978-9957', 'Agency' => 'Jordan', @@ -5823,7 +5864,7 @@ ), ), ), - 130 => + 131 => array ( 'Prefix' => '978-9958', 'Agency' => 'Bosnia and Herzegovina', @@ -5884,7 +5925,7 @@ ), ), ), - 131 => + 132 => array ( 'Prefix' => '978-9959', 'Agency' => 'Libya', @@ -5925,7 +5966,7 @@ ), ), ), - 132 => + 133 => array ( 'Prefix' => '978-9960', 'Agency' => 'Saudi Arabia', @@ -5951,7 +5992,7 @@ ), ), ), - 133 => + 134 => array ( 'Prefix' => '978-9961', 'Agency' => 'Algeria', @@ -5982,7 +6023,7 @@ ), ), ), - 134 => + 135 => array ( 'Prefix' => '978-9962', 'Agency' => 'Panama', @@ -6018,7 +6059,7 @@ ), ), ), - 135 => + 136 => array ( 'Prefix' => '978-9963', 'Agency' => 'Cyprus', @@ -6069,7 +6110,7 @@ ), ), ), - 136 => + 137 => array ( 'Prefix' => '978-9964', 'Agency' => 'Ghana', @@ -6095,7 +6136,7 @@ ), ), ), - 137 => + 138 => array ( 'Prefix' => '978-9965', 'Agency' => 'Kazakhstan', @@ -6121,7 +6162,7 @@ ), ), ), - 138 => + 139 => array ( 'Prefix' => '978-9966', 'Agency' => 'Kenya', @@ -6187,7 +6228,7 @@ ), ), ), - 139 => + 140 => array ( 'Prefix' => '978-9967', 'Agency' => 'Kyrgyz Republic', @@ -6213,7 +6254,7 @@ ), ), ), - 140 => + 141 => array ( 'Prefix' => '978-9968', 'Agency' => 'Costa Rica', @@ -6239,7 +6280,7 @@ ), ), ), - 141 => + 142 => array ( 'Prefix' => '978-9970', 'Agency' => 'Uganda', @@ -6265,7 +6306,7 @@ ), ), ), - 142 => + 143 => array ( 'Prefix' => '978-9971', 'Agency' => 'Singapore', @@ -6296,7 +6337,7 @@ ), ), ), - 143 => + 144 => array ( 'Prefix' => '978-9972', 'Agency' => 'Peru', @@ -6342,7 +6383,7 @@ ), ), ), - 144 => + 145 => array ( 'Prefix' => '978-9973', 'Agency' => 'Tunisia', @@ -6383,7 +6424,7 @@ ), ), ), - 145 => + 146 => array ( 'Prefix' => '978-9974', 'Agency' => 'Uruguay', @@ -6429,7 +6470,7 @@ ), ), ), - 146 => + 147 => array ( 'Prefix' => '978-9975', 'Agency' => 'Moldova', @@ -6475,7 +6516,7 @@ ), ), ), - 147 => + 148 => array ( 'Prefix' => '978-9976', 'Agency' => 'Tanzania', @@ -6490,20 +6531,25 @@ ), 1 => array ( - 'Range' => '5000000-5899999', + 'Range' => '5000000-5799999', 'Length' => '4', ), 2 => + array ( + 'Range' => '5800000-5899999', + 'Length' => '3', + ), + 3 => array ( 'Range' => '5900000-8999999', 'Length' => '2', ), - 3 => + 4 => array ( 'Range' => '9000000-9899999', 'Length' => '3', ), - 4 => + 5 => array ( 'Range' => '9900000-9999999', 'Length' => '4', @@ -6511,7 +6557,7 @@ ), ), ), - 148 => + 149 => array ( 'Prefix' => '978-9977', 'Agency' => 'Costa Rica', @@ -6537,7 +6583,7 @@ ), ), ), - 149 => + 150 => array ( 'Prefix' => '978-9978', 'Agency' => 'Ecuador', @@ -6573,7 +6619,7 @@ ), ), ), - 150 => + 151 => array ( 'Prefix' => '978-9979', 'Agency' => 'Iceland', @@ -6614,7 +6660,7 @@ ), ), ), - 151 => + 152 => array ( 'Prefix' => '978-9980', 'Agency' => 'Papua New Guinea', @@ -6645,7 +6691,7 @@ ), ), ), - 152 => + 153 => array ( 'Prefix' => '978-9981', 'Agency' => 'Morocco', @@ -6686,7 +6732,7 @@ ), ), ), - 153 => + 154 => array ( 'Prefix' => '978-9982', 'Agency' => 'Zambia', @@ -6712,7 +6758,7 @@ ), ), ), - 154 => + 155 => array ( 'Prefix' => '978-9983', 'Agency' => 'Gambia', @@ -6743,7 +6789,7 @@ ), ), ), - 155 => + 156 => array ( 'Prefix' => '978-9984', 'Agency' => 'Latvia', @@ -6769,7 +6815,7 @@ ), ), ), - 156 => + 157 => array ( 'Prefix' => '978-9985', 'Agency' => 'Estonia', @@ -6800,7 +6846,7 @@ ), ), ), - 157 => + 158 => array ( 'Prefix' => '978-9986', 'Agency' => 'Lithuania', @@ -6836,7 +6882,7 @@ ), ), ), - 158 => + 159 => array ( 'Prefix' => '978-9987', 'Agency' => 'Tanzania', @@ -6862,7 +6908,7 @@ ), ), ), - 159 => + 160 => array ( 'Prefix' => '978-9988', 'Agency' => 'Ghana', @@ -6893,7 +6939,7 @@ ), ), ), - 160 => + 161 => array ( 'Prefix' => '978-9989', 'Agency' => 'Macedonia', @@ -6934,7 +6980,7 @@ ), ), ), - 161 => + 162 => array ( 'Prefix' => '978-99901', 'Agency' => 'Bahrain', @@ -6960,7 +7006,7 @@ ), ), ), - 162 => + 163 => array ( 'Prefix' => '978-99902', 'Agency' => 'Reserved Agency', @@ -6976,7 +7022,7 @@ ), ), ), - 163 => + 164 => array ( 'Prefix' => '978-99903', 'Agency' => 'Mauritius', @@ -7002,7 +7048,7 @@ ), ), ), - 164 => + 165 => array ( 'Prefix' => '978-99904', 'Agency' => 'CuraƧao', @@ -7028,7 +7074,7 @@ ), ), ), - 165 => + 166 => array ( 'Prefix' => '978-99905', 'Agency' => 'Bolivia', @@ -7054,7 +7100,7 @@ ), ), ), - 166 => + 167 => array ( 'Prefix' => '978-99906', 'Agency' => 'Kuwait', @@ -7095,7 +7141,7 @@ ), ), ), - 167 => + 168 => array ( 'Prefix' => '978-99908', 'Agency' => 'Malawi', @@ -7121,7 +7167,7 @@ ), ), ), - 168 => + 169 => array ( 'Prefix' => '978-99909', 'Agency' => 'Malta', @@ -7147,7 +7193,7 @@ ), ), ), - 169 => + 170 => array ( 'Prefix' => '978-99910', 'Agency' => 'Sierra Leone', @@ -7173,7 +7219,7 @@ ), ), ), - 170 => + 171 => array ( 'Prefix' => '978-99911', 'Agency' => 'Lesotho', @@ -7194,7 +7240,7 @@ ), ), ), - 171 => + 172 => array ( 'Prefix' => '978-99912', 'Agency' => 'Botswana', @@ -7225,7 +7271,7 @@ ), ), ), - 172 => + 173 => array ( 'Prefix' => '978-99913', 'Agency' => 'Andorra', @@ -7261,7 +7307,7 @@ ), ), ), - 173 => + 174 => array ( 'Prefix' => '978-99914', 'Agency' => 'International NGO Publishers', @@ -7297,7 +7343,7 @@ ), ), ), - 174 => + 175 => array ( 'Prefix' => '978-99915', 'Agency' => 'Maldives', @@ -7323,7 +7369,7 @@ ), ), ), - 175 => + 176 => array ( 'Prefix' => '978-99916', 'Agency' => 'Namibia', @@ -7349,7 +7395,7 @@ ), ), ), - 176 => + 177 => array ( 'Prefix' => '978-99917', 'Agency' => 'Brunei Darussalam', @@ -7375,7 +7421,7 @@ ), ), ), - 177 => + 178 => array ( 'Prefix' => '978-99918', 'Agency' => 'Faroe Islands', @@ -7401,7 +7447,7 @@ ), ), ), - 178 => + 179 => array ( 'Prefix' => '978-99919', 'Agency' => 'Benin', @@ -7432,7 +7478,7 @@ ), ), ), - 179 => + 180 => array ( 'Prefix' => '978-99920', 'Agency' => 'Andorra', @@ -7458,7 +7504,7 @@ ), ), ), - 180 => + 181 => array ( 'Prefix' => '978-99921', 'Agency' => 'Qatar', @@ -7494,7 +7540,7 @@ ), ), ), - 181 => + 182 => array ( 'Prefix' => '978-99922', 'Agency' => 'Guatemala', @@ -7520,7 +7566,7 @@ ), ), ), - 182 => + 183 => array ( 'Prefix' => '978-99923', 'Agency' => 'El Salvador', @@ -7546,7 +7592,7 @@ ), ), ), - 183 => + 184 => array ( 'Prefix' => '978-99924', 'Agency' => 'Nicaragua', @@ -7572,7 +7618,7 @@ ), ), ), - 184 => + 185 => array ( 'Prefix' => '978-99925', 'Agency' => 'Paraguay', @@ -7598,7 +7644,7 @@ ), ), ), - 185 => + 186 => array ( 'Prefix' => '978-99926', 'Agency' => 'Honduras', @@ -7634,7 +7680,7 @@ ), ), ), - 186 => + 187 => array ( 'Prefix' => '978-99927', 'Agency' => 'Albania', @@ -7660,7 +7706,7 @@ ), ), ), - 187 => + 188 => array ( 'Prefix' => '978-99928', 'Agency' => 'Georgia', @@ -7686,7 +7732,7 @@ ), ), ), - 188 => + 189 => array ( 'Prefix' => '978-99929', 'Agency' => 'Mongolia', @@ -7712,7 +7758,7 @@ ), ), ), - 189 => + 190 => array ( 'Prefix' => '978-99930', 'Agency' => 'Armenia', @@ -7738,7 +7784,7 @@ ), ), ), - 190 => + 191 => array ( 'Prefix' => '978-99931', 'Agency' => 'Seychelles', @@ -7764,7 +7810,7 @@ ), ), ), - 191 => + 192 => array ( 'Prefix' => '978-99932', 'Agency' => 'Malta', @@ -7800,7 +7846,7 @@ ), ), ), - 192 => + 193 => array ( 'Prefix' => '978-99933', 'Agency' => 'Nepal', @@ -7826,7 +7872,7 @@ ), ), ), - 193 => + 194 => array ( 'Prefix' => '978-99934', 'Agency' => 'Dominican Republic', @@ -7852,7 +7898,7 @@ ), ), ), - 194 => + 195 => array ( 'Prefix' => '978-99935', 'Agency' => 'Haiti', @@ -7888,7 +7934,7 @@ ), ), ), - 195 => + 196 => array ( 'Prefix' => '978-99936', 'Agency' => 'Bhutan', @@ -7914,7 +7960,7 @@ ), ), ), - 196 => + 197 => array ( 'Prefix' => '978-99937', 'Agency' => 'Macau', @@ -7940,7 +7986,7 @@ ), ), ), - 197 => + 198 => array ( 'Prefix' => '978-99938', 'Agency' => 'Srpska, Republic of', @@ -7971,7 +8017,7 @@ ), ), ), - 198 => + 199 => array ( 'Prefix' => '978-99939', 'Agency' => 'Guatemala', @@ -7997,7 +8043,7 @@ ), ), ), - 199 => + 200 => array ( 'Prefix' => '978-99940', 'Agency' => 'Georgia', @@ -8023,7 +8069,7 @@ ), ), ), - 200 => + 201 => array ( 'Prefix' => '978-99941', 'Agency' => 'Armenia', @@ -8049,7 +8095,7 @@ ), ), ), - 201 => + 202 => array ( 'Prefix' => '978-99942', 'Agency' => 'Sudan', @@ -8075,7 +8121,7 @@ ), ), ), - 202 => + 203 => array ( 'Prefix' => '978-99943', 'Agency' => 'Albania', @@ -8101,7 +8147,7 @@ ), ), ), - 203 => + 204 => array ( 'Prefix' => '978-99944', 'Agency' => 'Ethiopia', @@ -8127,7 +8173,7 @@ ), ), ), - 204 => + 205 => array ( 'Prefix' => '978-99945', 'Agency' => 'Namibia', @@ -8153,7 +8199,7 @@ ), ), ), - 205 => + 206 => array ( 'Prefix' => '978-99946', 'Agency' => 'Nepal', @@ -8179,7 +8225,7 @@ ), ), ), - 206 => + 207 => array ( 'Prefix' => '978-99947', 'Agency' => 'Tajikistan', @@ -8205,7 +8251,7 @@ ), ), ), - 207 => + 208 => array ( 'Prefix' => '978-99948', 'Agency' => 'Eritrea', @@ -8231,7 +8277,7 @@ ), ), ), - 208 => + 209 => array ( 'Prefix' => '978-99949', 'Agency' => 'Mauritius', @@ -8257,7 +8303,7 @@ ), ), ), - 209 => + 210 => array ( 'Prefix' => '978-99950', 'Agency' => 'Cambodia', @@ -8283,7 +8329,7 @@ ), ), ), - 210 => + 211 => array ( 'Prefix' => '978-99951', 'Agency' => 'Reserved Agency', @@ -8299,7 +8345,7 @@ ), ), ), - 211 => + 212 => array ( 'Prefix' => '978-99952', 'Agency' => 'Mali', @@ -8325,7 +8371,7 @@ ), ), ), - 212 => + 213 => array ( 'Prefix' => '978-99953', 'Agency' => 'Paraguay', @@ -8356,7 +8402,7 @@ ), ), ), - 213 => + 214 => array ( 'Prefix' => '978-99954', 'Agency' => 'Bolivia', @@ -8387,7 +8433,7 @@ ), ), ), - 214 => + 215 => array ( 'Prefix' => '978-99955', 'Agency' => 'Srpska, Republic of', @@ -8418,7 +8464,7 @@ ), ), ), - 215 => + 216 => array ( 'Prefix' => '978-99956', 'Agency' => 'Albania', @@ -8444,7 +8490,7 @@ ), ), ), - 216 => + 217 => array ( 'Prefix' => '978-99957', 'Agency' => 'Malta', @@ -8475,7 +8521,7 @@ ), ), ), - 217 => + 218 => array ( 'Prefix' => '978-99958', 'Agency' => 'Bahrain', @@ -8506,7 +8552,7 @@ ), ), ), - 218 => + 219 => array ( 'Prefix' => '978-99959', 'Agency' => 'Luxembourg', @@ -8532,7 +8578,7 @@ ), ), ), - 219 => + 220 => array ( 'Prefix' => '978-99960', 'Agency' => 'Malawi', @@ -8558,7 +8604,7 @@ ), ), ), - 220 => + 221 => array ( 'Prefix' => '978-99961', 'Agency' => 'El Salvador', @@ -8589,7 +8635,7 @@ ), ), ), - 221 => + 222 => array ( 'Prefix' => '978-99962', 'Agency' => 'Mongolia', @@ -8615,7 +8661,7 @@ ), ), ), - 222 => + 223 => array ( 'Prefix' => '978-99963', 'Agency' => 'Cambodia', @@ -8641,7 +8687,7 @@ ), ), ), - 223 => + 224 => array ( 'Prefix' => '978-99964', 'Agency' => 'Nicaragua', @@ -8667,7 +8713,7 @@ ), ), ), - 224 => + 225 => array ( 'Prefix' => '978-99965', 'Agency' => 'Macau', @@ -8698,7 +8744,7 @@ ), ), ), - 225 => + 226 => array ( 'Prefix' => '978-99966', 'Agency' => 'Kuwait', @@ -8734,7 +8780,7 @@ ), ), ), - 226 => + 227 => array ( 'Prefix' => '978-99967', 'Agency' => 'Paraguay', @@ -8760,7 +8806,7 @@ ), ), ), - 227 => + 228 => array ( 'Prefix' => '978-99968', 'Agency' => 'Botswana', @@ -8791,7 +8837,7 @@ ), ), ), - 228 => + 229 => array ( 'Prefix' => '978-99969', 'Agency' => 'Oman', @@ -8817,7 +8863,7 @@ ), ), ), - 229 => + 230 => array ( 'Prefix' => '978-99970', 'Agency' => 'Haiti', @@ -8843,7 +8889,7 @@ ), ), ), - 230 => + 231 => array ( 'Prefix' => '978-99971', 'Agency' => 'Myanmar', @@ -8869,7 +8915,7 @@ ), ), ), - 231 => + 232 => array ( 'Prefix' => '978-99972', 'Agency' => 'Faroe Islands', @@ -8895,7 +8941,7 @@ ), ), ), - 232 => + 233 => array ( 'Prefix' => '978-99973', 'Agency' => 'Mongolia', @@ -8921,7 +8967,7 @@ ), ), ), - 233 => + 234 => array ( 'Prefix' => '978-99974', 'Agency' => 'Bolivia', @@ -8967,7 +9013,7 @@ ), ), ), - 234 => + 235 => array ( 'Prefix' => '978-99975', 'Agency' => 'Tajikistan', @@ -8998,7 +9044,7 @@ ), ), ), - 235 => + 236 => array ( 'Prefix' => '978-99976', 'Agency' => 'Srpska, Republic of', @@ -9034,7 +9080,7 @@ ), ), ), - 236 => + 237 => array ( 'Prefix' => '978-99977', 'Agency' => 'Rwanda', @@ -9070,7 +9116,7 @@ ), ), ), - 237 => + 238 => array ( 'Prefix' => '978-99978', 'Agency' => 'Mongolia', @@ -9096,7 +9142,7 @@ ), ), ), - 238 => + 239 => array ( 'Prefix' => '978-99979', 'Agency' => 'Honduras', @@ -9122,7 +9168,7 @@ ), ), ), - 239 => + 240 => array ( 'Prefix' => '978-99980', 'Agency' => 'Bhutan', @@ -9158,7 +9204,7 @@ ), ), ), - 240 => + 241 => array ( 'Prefix' => '978-99981', 'Agency' => 'Macau', @@ -9194,7 +9240,7 @@ ), ), ), - 241 => + 242 => array ( 'Prefix' => '978-99982', 'Agency' => 'Benin', @@ -9235,7 +9281,7 @@ ), ), ), - 242 => + 243 => array ( 'Prefix' => '978-99983', 'Agency' => 'El Salvador', @@ -9271,7 +9317,7 @@ ), ), ), - 243 => + 244 => array ( 'Prefix' => '979-10', 'Agency' => 'France', @@ -9307,7 +9353,7 @@ ), ), ), - 244 => + 245 => array ( 'Prefix' => '979-11', 'Agency' => 'Korea, Republic', @@ -9343,7 +9389,7 @@ ), ), ), - 245 => + 246 => array ( 'Prefix' => '979-12', 'Agency' => 'Italy', @@ -9363,13 +9409,23 @@ ), 2 => array ( - 'Range' => '2010000-9999999', + 'Range' => '2010000-7999999', + 'Length' => '0', + ), + 3 => + array ( + 'Range' => '8000000-8499999', + 'Length' => '5', + ), + 4 => + array ( + 'Range' => '8500000-9999999', 'Length' => '0', ), ), ), ), - 246 => + 247 => array ( 'Prefix' => '979-8', 'Agency' => 'United States', diff --git a/tests/IsbnTest.php b/tests/IsbnTest.php index ba4af58..14ff8f2 100644 --- a/tests/IsbnTest.php +++ b/tests/IsbnTest.php @@ -123,4 +123,17 @@ public function testValidateMexicanIsbn() $this->assertTrue($isbn->isValid()); $this->assertEquals($isbn->format("ISBN-13"), "978-970-07-6492-4"); } + + /** + * Invalid ISBN should not be validated + * Github issue #22: https://github.com/biblys/isbn/issues/22 + */ + public function testOtherInvalidIsbn() + { + $this->expectException("Exception"); + $this->expectExceptionMessage("Invalid characters in the code"); + + $isbn = new Isbn("34995031X"); + $isbn->validate(); + } }