Samx Here
n1udSecurity


Server : Apache
System : Linux webd348.cluster026.gra.hosting.ovh.net 5.15.148-ovh-vps-grsec-zfs-classid #1 SMP Thu Feb 8 09:41:04 UTC 2024 x86_64
User : hednacluml ( 122243)
PHP Version : 8.3.9
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
Directory :  /home/hednacluml/jobs/plugins/auto/verifier/verifier/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/hednacluml/jobs/plugins/auto/verifier/verifier/siren_siret.php
<?php

/**
 * API de vérification : vérification de la validité d'un numéro SIREN/SIRET
 *
 * @plugin     verifier
 * @copyright  2018
 * @author     Les Développements Durables
 * @licence    GNU/GPL
 */

// Sécurité
if (!defined('_ECRIRE_INC_VERSION')) {
	return;
}

/**
 * Validation d'un SIREN ou d'un SIRET
 *
 * 1/ Un SIREN comporte STRICTEMENT 9 caractères
 * 1b/ Un SIRET comporte strictement 14 caractères
 * 2/ Un siren/siret utilise une clef de controle "1-2"
 *    Un siren/siret est donc valide si la somme des chiffres pairs
 *    + la somme du double de tous les chiffres impairs (16 = 1+6 = 7) est un multiple de 10
 *
 * @param string $valeur
 *   La valeur à vérifier.
 * @param array $options
 *   Indique s'il faut tester le SIREN ou le SIRET.
 * @return string
 *   Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
 */
function verifier_siren_siret_dist($valeur, $options = []) {
	if (!in_array($options['mode'] ?? '', ['siren', 'siret'])) {
		$mode = 'siren';
	} else {
		$mode = $options['mode'];
	}

	// on supprime les espaces avant d'effectuer les tests
	$valeur = preg_replace('/\s/', '', $valeur);

	// Test de SIREN
	if ($mode == 'siren') {
		$erreur = _T('verifier:erreur_siren');
		if (!is_string($valeur)) {
			return $erreur;
		}

		// Si pas 9 caractère, c'est déjà foiré !
		if (!preg_match('/^[0-9]{9}$/', $valeur)) {
			return $erreur;
		}

		// On vérifie la clef de controle "1-2"
		$somme = 0;
		$i = 0; // Les impaires
		while ($i < 9) {
			$somme += $valeur[$i];
			$i += 2;
		}
		$i = 1; // Les paires !
		while ($i < 9) {
			$valeur[$i] = intval($valeur[$i]);
			if ((2 * $valeur[$i]) > 9) {
				$somme += (2 * $valeur[$i]) - 9;
			} else {
				$somme += 2 * $valeur[$i];
			}
			$i += 2;
		}

		if ($somme % 10) {
			return $erreur;
		}
	} else {
		// Test de SIRET
		$erreur = _T('verifier:erreur_siret');
		if (!is_string($valeur)) {
			return $erreur;
		}

		// Si pas 14 caractère, c'est déjà foiré !
		if (!preg_match('/^[0-9]{14}$/', $valeur)) {
			return $erreur;
		}
		if (preg_match('/[0]{8}/', $valeur)) {
			return $erreur;
		}

		// Pour le SIRET on vérifie la clef de controle "1-2" avec les impaires *2
		// (vs pairs*2 pour SIREN, parce qu'on part de la fin)
		$somme = 0;
		$i = 1; // Les paires
		while ($i < 14) {
			$somme += $valeur[$i];
			$i += 2;
		}
		$i = 0; // Les impaires !
		while ($i < 14) {
			$valeur[$i] = intval($valeur[$i]);
			if ((2 * $valeur[$i]) > 9) {
				$somme += (2 * $valeur[$i]) - 9;
			} else {
				$somme += 2 * $valeur[$i];
			}
			$i += 2;
		}

		if ($somme % 10) {
			return $erreur;
		}
	}

	return '';
}

SAMX