Esempio n. 1
0
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;
                }
            }
        }
    }
}
Esempio n. 2
0
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;
                }
            }
        }
    }
}