<?php

namespace Helpers\Outil;

class Societe
{

    // fonction permettant de contrôler la validité d'un numéro SIREN
    // phpcs:ignore
    public static function is_siren($siren)
    {
        $sum = 0;
        if (strlen($siren) != 9) {
            return false; // le SIREN doit contenir 9 caractères
        }
        if (!is_numeric($siren)) {
            return false; // le SIREN ne doit contenir que des chiffres
        }

        // on prend chaque chiffre un par un
        // si son index (position dans la chaîne en commence à 0 au premier caractère) est impair
        // on double sa valeur et si cette dernière est supérieure à 9, on lui retranche 9
        // on ajoute cette valeur à la somme totale

        for ($index = 0; $index < 9; $index ++) {
            $number = (int) $siren[$index];
            if (($index % 2) != 0) {
                if (($number *= 2) > 9) {
                    $number -= 9;
                }
            }
            $sum += $number;
        }

        // le numéro est valide si la somme des chiffres est multiple de 10
        if (($sum % 10) != 0) {
            return false;
        } else {
            return true;
        }
    }

    // fonction permettant de contrôler la validité d'un numéro SIRET
    // phpcs:ignore
    public static function is_siret($siret)
    {
        $sum = 0;
        if (strlen($siret) != 14) {
            return 1; // le SIRET doit contenir 14 caractères
        }
        if (!is_numeric($siret)) {
            return 2; // le SIRET ne doit contenir que des chiffres
        }

        // on prend chaque chiffre un par un
        // si son index (position dans la chaîne en commence à 0 au premier caractère) est pair
        // on double sa valeur et si cette dernière est supérieure à 9, on lui retranche 9
        // on ajoute cette valeur à la somme totale

        for ($index = 0; $index < 14; $index ++) {
            $number = (int) $siret[$index];
            if (($index % 2) == 0) {
                if (($number *= 2) > 9) {
                    $number -= 9;
                }
            }
            $sum += $number;
        }

        // le numéro est valide si la somme des chiffres est multiple de 10
        if (($sum % 10) != 0) {
            return false;
        } else {
            return true;
        }
    }

    // fonction permettant de contrôler la validité d'un code-barres de type EAN-13
    // phpcs:ignore
    public static function is_ean13($ean13)
    {
        $sum = 0;
        if (strlen($ean13) != 13) {
            return 1; // le code-barres doit contenir 13 caractères
        }
        if (!is_numeric($ean13)) {
            return 2; // le code-barres ne doit contenir que des chiffres
        }

        // on prend chaque chiffre un par un
        // si son index (position dans la chaîne en commence à 0 au premier caractère) est impair
        // on triple sa valeur
        // on ajoute cette valeur à la somme totale

        for ($index = 0; $index < 12; $index ++) {
            $number = (int) $ean13[$index];
            if (($index % 2) != 0) {
                $number *= 3;
            }
            $sum += $number;
        }

        $key = $ean13[12]; // clé de contrôle égale au dernier chiffre
            
        // la clé de contrôle doit être égale à : 10 - (reste de la division de la somme des 12 premiers chiffres)
        if (10 - ($sum % 10) != $key) {
            return true;
        } else {
            return false;
        }
    }
}
