fr.php
来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· PHP 代码 · 共 218 行
PHP
218 行
<?php/* vim: set expandtab tabstop=4 shiftwidth=4: */// +----------------------------------------------------------------------+// | PHP Version 4 |// +----------------------------------------------------------------------+// | Copyright (c) 1997-2003 The PHP Group |// +----------------------------------------------------------------------+// | This source file is subject to version 2.02 of the PHP license, |// | that is bundled with this package in the file LICENSE, and is |// | available at through the world-wide-web at |// | http://www.php.net/license/2_02.txt. |// | If you did not receive a copy of the PHP license and are unable to |// | obtain it through the world-wide-web, please send a note to |// | license@php.net so we can mail you a copy immediately. |// +----------------------------------------------------------------------+// | Authors: Pierre-Alain Joye <paj@pearfr.org> |// +----------------------------------------------------------------------+//// $Id: FR.php,v 1.8 2003/02/17 10:56:41 mansion Exp $//// Specific validation methods for data used in Francerequire_once("Validate.php");define('VALIDATE_FR_SSN_MODULUS', 97);class Validate_FR{ /** * Validate a french SSN * * TO DO : * strong validation against the INSEE cities databases (rpc or local DB) * * This function checks given number according the specs * available here: * http://www.dads.cnav.fr/tds/Stru0103.htm * * @param string $number number or an array containaing the 'number'=>1234 * @return bool true if number is valid, otherwise false * @author Pierre-Alain Joye <paj@pearfr.org> */ function ssn($ssn) { $str = strtolower(preg_replace('/[^0-9a-zA-Z]/','',$ssn)); $regexp = "/^([12])(\d\d)(\d\d)(\d\d|2a|2b)(\d\d\d)(\d\d\d)(\d\d)$/"; if (!preg_match($regexp,$str,$parts)) { return false; } // special case for Corsica and DOM not 100% sure, but cannot test from a db :) if ($parts[4] == '2a' || $parts[4] == '2b' || $parts[4] == '9a' || $parts[4] == '9b' || $parts[4] == '9c' || $parts[4] == '9d') { if (strlen($str) == 15) { return true; } else { return false; } } if ($parts[2] < 1 || $parts[2] > 99) { return false; } if ($parts[3] < 1 || $parts[3] > 12) { return false; } if ($parts[4] < 1 || $parts[4] > 99) { return false; } // Person born outside France (region code==99), have to check insee country code // To do /* if($parts[4]==99){ include 'FR_insee_country_codes.php'; if ( !isset( $insee_country[$parts[5]] ) ){ return false; } } */ $num = $parts[1].$parts[2].$parts[3].$parts[4].$parts[5].$parts[6]; $key = VALIDATE_FR_SSN_MODULUS - Validate::_modf($num,VALIDATE_FR_SSN_MODULUS); return ($key == $parts[7]) ? true : false; } /** * Validate a french RIB * * TO DO : * strong validation against the INSEE cities databases (rpc or local DB) * * This function checks given number according the specs * available here: * http://www.dads.cnav.fr/tds/Stru0103.htm * * @param string $aCodeBanque number or an array containaing the 'number'=>1234 * @param string $aCodeGuichet number or an array containaing the 'number'=>1234 * @param string $aNoCompte number or an array containaing the 'number'=>1234 * @param string $number number or an array containaing the 'number'=>1234 * @return bool true if number is valid, otherwise false * @author Pierre-Alain Joye <paj@pearfr.org> */ function rib($rib) { if (is_array($rib)) { $codebanque=$codeguichet=$nocompte=$key=''; extract($rib); } else { return false; } $chars = array('/[AJ]/','/[BKZ]/','/[CLT]/','/[DMU]/','/[ENV]/','/[FOW]/','/[GPX]/','/[HQY]/','/[IRZ]/'); $values = array('1','2','3','4','5','6','7','8','9'); $codebank = preg_replace('/[^0-9]/', '', $codebanque); $officecode = preg_replace('/[^0-9]/', '', $codeguichet); $account = preg_replace($chars, $values, $nocompte); if (strlen($codebank) != 5){ return false; } if (strlen($officecode) != 5){ return false; } if (strlen($account) > 11){ return false; } $l = $codebank.$officecode.$account; $a1 = substr($l, 0, 7); $b1 = substr($l, 7, 7); $c1 = substr($l, 14, 7); $key = 97 - Validate::_modf((62*$a1+34*$b1+3*$c1), 97); if ($key == 0){ $key = 97; } return $key == intval($key); } /** * Validate a french SIREN number * * * @param string $siren number or an array containaing the 'number'=>1234 * @return bool true if number is valid, otherwise false * @author Damien Seguy <dams@nexen.net> */ function siren($siren) { $siren = str_replace(' ', '', $siren); if (!preg_match("/^(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)$/", $siren, $match)) { return false; } $match[2] *= 2; $match[4] *= 2; $match[6] *= 2; $match[8] *= 2; $sum = 0; for ($i = 1; $i < count($match); $i++) { if ($match[$i] > 9) { $a = (int)substr($match[$i], 0, 1); $b = (int)substr($match[$i], 1, 1); $match[$i] = $a + $b; } $sum += $match[$i]; } return (($sum % 10) == 0); } /** * Validate a french SIRET number * * * @param string $siret number or an array containaing the 'number'=>1234 * @return bool true if number is valid, otherwise false * @author Damien Seguy <dams@nexen.net> */ function siret($siret) { $siret = str_replace(' ', '', $siret); if (!preg_match("/^(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)$/", $siret, $match)) { return false; } else { if (!Validate_FR::siren(implode('', array_slice($match, 1,9)))) { return false; } } $match[1] *= 2; $match[3] *= 2; $match[5] *= 2; $match[7] *= 2; $match[9] *= 2; $match[11] *= 2; $match[13] *= 2; $sum = 0; for ($i = 1; $i < count($match); $i++) { if ($match[$i] > 9) { $a = (int)substr($match[$i], 0, 1); $b = (int)substr($match[$i], 1, 1); $match[$i] = $a + $b; } $sum += $match[$i]; } return (($sum % 10) == 0); }}?>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?