Platon Technologies
neprihlásený Prihlásiť Registrácia
SlovakEnglish
open source software development oslavujeme 10 rokov vývoja otvoreného softvéru! Piatok, 19. apríl 2024

Súbor: [Platon] / Metafox / lib / Validate / US.php (stiahnutie)

Revízia 1.1, Sun Jun 5 12:14:40 2005 UTC (18 years, 10 months ago) by nepto

Metafox content management system (CMS) was finally imported
into the Platon Group CVS repository in version 0.8.10

<?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 3.0 of the PHP license,       |
// | that is bundled with this package in the file LICENSE, and is        |
// | available through the world-wide-web at the following url:           |
// | http://www.php.net/license/3_0.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: Brent Cook <busterb@mail.utexas.edu>                        |
// |          Tim Gallagher <timg@sunflowerroad.com>                      |
// +----------------------------------------------------------------------+
//
// $Id: US.php,v 1.1 2005/06/05 12:14:40 nepto Exp $
//
// Specific validation methods for data used in the United States
//

require_once 'PEAR.php';
require_once 'File.php';

class Validate_US
{
    /**
     * Validates a social security number
     * @param string $ssn number to validate
     * @param array $high_groups array of highest issued SSN group numbers
     * @returns bool
     */
    function ssn($ssn, $high_groups = null)
    {
        // remove any dashes, spaces, returns, tabs or slashes
        $ssn = str_replace(array('-','/',' ',"\t","\n"), '', $ssn);

        // check if this is a 9-digit number
        if (!is_numeric($ssn) || !(strlen($ssn) == 9)) {
            return false;
        }
        $area   = intval(substr($ssn, 0, 3));
        $group  = intval(substr($ssn, 3, 2));
        $serial = intval(substr($ssn, 5, 4));

        if (is_null($high_groups)) {
            $high_groups = Validate_US::ssnGetHighGroups();
        }
        return Validate_US::ssnCheck($area, $group, $serial, $high_groups);
    }

    /**
    * Returns a range for a supplied group number, which
    * is the middle, two-digit field of a SSN.
    * Group numbers are defined as follows:
    * 1 - Odd numbers, 01 to 09
    * 2 - Even numbers, 10 to 98
    * 3 - Even numbers, 02 to 08
    * 4 - Odd numbers, 11 to 99
    * @param int $groupNumber a group number to check, 00-99
    * @return int
    */
    function ssnGroupRange($groupNumber)
    {
        if(is_array($groupNumber)){
            extract($groupNumber);
        }
        if ($groupNumber < 10) {
            // is the number odd?
            if ($groupNumber % 2) {
                return 1;
            } else {
                return 3;
            }
        } else {
            // is the number odd?
            if ($groupNumber % 2) {
                return 4;
            } else {
                return 2;
            }
        }
    }

    /**
     * checks if a Social Security Number is valid
     * needs the first three digits and first two digits and the
     * final four digits as separate integer parameters
     * @param int $area 3-digit group in a SSN
     * @param int $group 2-digit group in a SSN
     * @param int $serial 4-digit group in a SSN
     * @param array $high_groups array of highest issued group numbers
     *                           area number=>group number
     */
    function ssnCheck($ssnCheck, $group, $serial, $high_groups)
    {
        if(is_array($ssnCheck)){
            extract($ssnCheck);
        }
        // perform trivial checks
        // no field should contain all zeros
        if (!($area && $group && $serial)) {
            return false;
        }

        // check if this area has been assigned yet
        if (!($high_group = $high_groups[$area])) {
            return false;
        }

        $high_group_range = Validate_US::ssnGroupRange($high_group);
        $group_range = Validate_US::ssnGroupRange($group);

        // if the assigned range is higher than this group number, we're OK
        if ($high_group_range > $group_range) {
            return true;
        } else {
            // if the assigned range is lower than the group number, that's bad
            if ($high_group_range < $group_range) {
                return false;
            } else {
                // we must be in the same range, check the actual numbers
                if ($high_group >= $group) {
                    return true;
                } else {
                    return false;
                }
            }
        }
    }

    /**
     * Gets the most current list the highest SSN group numbers issued
     * from the Social Security Administration website. This info can be
     * cached for performance (and to lessen the load on the SSA website)
     *
     * @param string $uri Path to the SSA highgroup.htm file
     * @param bool   $is_text Take the $highgroup_htm param as directly the contents
     * @returns array
     */
    function ssnGetHighGroups($uri = 'http://www.ssa.gov/foia/highgroup.htm',
                              $is_text = false)
    {
        if (!$is_text) {
            if (!$fd = @fopen($uri, 'r')) {
                trigger_error("Could not access the SSA High Groups file", E_USER_WARNING);
                return array();
            }
            $source = '';
            while ($data = fread($fd, 2048)) {
                $source .= $data;
            }
            fclose($fd);
        }

        $search = array ("'<script[^>]*?>.*?</script>'si",  // Strip javascript
                         "'<[\/\!]*?[^<>]*?>'si",           // Strip html tags
                         "'([\r\n])[\s]+'",                 // Strip white space
                         "'\*'si");

        $replace = array ('','','\\1','');

        $lines = explode("\n", preg_replace($search, $replace, $source));
        $high_groups = array();
        foreach ($lines as $line) {
            $line = trim($line);
            if ((strlen($line) == 3) && is_numeric($line)) {
                $current_group = $line;
            } elseif ((strlen($line) == 2) && is_numeric($line)) {
                $high_groups[$current_group] = $line;
            }
        }
        return $high_groups;
    }
}
?>

Platon Group <platon@platon.sk> http://platon.sk/
Copyright © 2002-2006 Platon Group
Stránka používa redakčný systém Metafox
Na začiatok