function formatISBN($isbn, $taille = "") { global $array_isbn_ranges; $isbn = preg_replace('/-|\\.| /', '', $isbn); if (strlen($isbn) == 13) { $segg = substr($isbn, 0, 3); $seggBis = $segg; $isbn = substr($isbn, 3, 10); } else { $segg = ""; $seggBis = "978"; } // traitement du code géographique $sTmp1 = substr($isbn, 0, 1) - 0; $sTmp2 = substr($isbn, 0, 2) - 0; $sTmp3 = substr($isbn, 0, 3) - 0; $sTmp4 = substr($isbn, 0, 4) - 0; $sTmp5 = substr($isbn, 0, 5) - 0; $seg1 = ""; if (isset($array_isbn_ranges[$seggBis])) { foreach ($array_isbn_ranges[$seggBis] as $code => $ranges) { $len_code = strlen($code); if ($code == ${"sTmp" . $len_code}) { $seg1 = $code; break; } } } if ($seg1 === "") { $seg1 = $sTmp5; } $isbn = preg_replace("/^{$seg1}/", '', $isbn); // calcul du segment de l'éditeur $seg2 = $isbn; if (isset($array_isbn_ranges[$seggBis][$seg1])) { foreach ($array_isbn_ranges[$seggBis][$seg1] as $motif) { $tmpRange = explode("-", $motif); $strlen = strlen($tmpRange[0]); $sTmp = substr($isbn, 0, $strlen) - 0; if ($sTmp >= (int) $tmpRange[0] && $sTmp <= (int) $tmpRange[1]) { $seg2 = substr($isbn, 0, $strlen); break; } } } $isbn = preg_replace("/^{$seg2}/", '', $isbn); $key = $isbn[strlen($isbn) - 1]; $seg3 = substr($isbn, 0, strlen($isbn) - 1); $isbn = ($segg ? $segg . "-" : "") . "{$seg1}-{$seg2}-{$seg3}-{$key}"; if (!$taille) { return $isbn; } else { if ($taille == 10) { //C'est un 13, on recalcule la clef pour le 10 if ($segg) { $key = key10($seg1 . $seg2 . $seg3); return "{$seg1}-{$seg2}-{$seg3}-{$key}"; } else { return $isbn; } } else { if ($taille == 13) { //C'est un 10, on recalcule la clef if (!$segg) { $segg = "978"; $key = key13($segg . $seg1 . $seg2 . $seg3); return "{$segg}-{$seg1}-{$seg2}-{$seg3}-{$key}"; } else { return $isbn; } } } } }
function formatISBN($isbn, $taille = "") { $isbn = preg_replace('/-|\\.| /', '', $isbn); if (strlen($isbn) == 13) { $segg = substr($isbn, 0, 3); $isbn = substr($isbn, 3, 10); } else { $segg = ""; } // traitement du code géographique $sTmp1 = substr($isbn, 0, 1) - 0; $sTmp2 = substr($isbn, 0, 2) - 0; $sTmp3 = substr($isbn, 0, 3) - 0; $sTmp4 = substr($isbn, 0, 4) - 0; $sTmp5 = substr($isbn, 0, 5) - 0; if ($sTmp1 <= 7) { $seg1 = $sTmp1; } elseif ($sTmp2 <= 94) { $seg1 = $sTmp2; } elseif ($sTmp3 <= 995) { $seg1 = $sTmp3; } elseif ($sTmp4 <= 9989) { $seg1 = $sTmp4; } else { $seg1 = $sTmp5; } $isbn = preg_replace("/^{$seg1}/", '', $isbn); // calcul du segment de l'éditeur $sTmp2 = substr($isbn, 0, 2) - 0; $sTmp3 = substr($isbn, 0, 3) - 0; $sTmp4 = substr($isbn, 0, 4) - 0; $sTmp5 = substr($isbn, 0, 5) - 0; $sTmp6 = substr($isbn, 0, 6) - 0; $sTmp7 = substr($isbn, 0, 7) - 0; if ($sTmp2 <= 19) { $seg2 = substr($isbn, 0, 2); } else { if ($sTmp3 <= 699) { $seg2 = substr($isbn, 0, 3); } else { if ($sTmp4 <= 8399) { $seg2 = substr($isbn, 0, 4); } else { if ($sTmp5 <= 89999) { $seg2 = substr($isbn, 0, 5); } else { if ($sTmp6 <= 9499999) { $seg2 = substr($isbn, 0, 6); } else { $seg2 = substr($isbn, 0, 7); } } } } } $isbn = preg_replace("/^{$seg2}/", '', $isbn); $key = $isbn[strlen($isbn) - 1]; $seg3 = substr($isbn, 0, strlen($isbn) - 1); $isbn = ($segg ? $segg . "-" : "") . "{$seg1}-{$seg2}-{$seg3}-{$key}"; if (!$taille) { return $isbn; } else { if ($taille == 10) { //C'est un 13, on recalcule la clef pour le 10 if ($segg) { $key = key10($seg1 . $seg2 . $seg3); // print "$seg1-$seg2-$seg3-$key"; return "{$seg1}-{$seg2}-{$seg3}-{$key}"; } else { return $isbn; } } else { if ($taille == 13) { //C'est un 10, on recalcule la clef if (!$segg) { $segg = "978"; $key = key13($segg . $seg1 . $seg2 . $seg3); // print "$seg1-$seg2-$seg3-$key"; return "{$segg}-{$seg1}-{$seg2}-{$seg3}-{$key}"; } else { return $isbn; } } } } }