REGON

Z Wikipedii

Skocz do: nawigacji, szukaj

REGON (akronim od Rejestr Gospodarki Narodowej) - Krajowy Rejestr Urzędowy Podmiotów Gospodarki Narodowej, rejestr statystyczny prowadzony przez Prezesa Głównego Urzędu Statystycznego. Pod pojęciem REGONu rozumiany jest także Numer REGON, czyli dziewięciocyfrowy numer statystyczny podmiotu gospodarczego w powyższym rejestrze.

Spis treści

[edytuj] Budowa numeru REGON

[edytuj] 9-cyfrowy REGON

Początkowo, REGON był 7-cyfrowy, a numery były nadawane centralnie. Później (ok. 1985-90 r.) rozszerzono REGON na 9 cyfr, gdzie regonom "starym" (7-cyfrowym) po prostu dołożono na początku 2 zera, a nowe zaczęto tworzyć wg klucza: 2 cyfry wyróżnika województwa + 6 cyfr "nru seryjnego" + 1 cyfra kontrolna. Województw było 49 i miały nadane kolejne numery nieparzyste – od 01 (warszawskie) do 97 (zielonogórskie).

[edytuj] Suma kontrolna

Dziewiąta cyfra jest cyfrą kontrolną obliczaną następująco:

Wagi: 8 9 2 3 4 5 6 7

Pierwsze osiem cyfr REGON: 1 2 3 4 5 6 7 8

Wynik: 1*8 + 2*9 + 3*2 + 4*3 + 5*4 + 6*5 + 7*6 + 8*7 = 192

Cyfra kontrolna: 192 mod 11 = 5

Cały REGON: 123456785

W przypadku, gdy mod zwraca 10 za cyfrę kontrolną przyjmuje się 0.

[edytuj] 14-cyfrowy REGON

Jednostkom organizacyjnym, które mają swoje siedziby w różnych województwach nadaje się REGON 14-cyfrowy (identyfikator jednostki lokalnej). Dziewięć pierwszych cyfr takiego numeru pokrywa się z REGONem jednostki macierzystej. Cyfra kontrolna numeru obliczana jest tym samym sposobem, ale wagi są inne. Ponieważ jeden ze współczynników wagowych wynosi zero to weryfikacja "długiego" REGONu wymaga weryfikacji 9 cyfr z wagami jak dla 9-cyfrowego numeru, a następnie weryfikacji długiego REGONu z innymi wagami.

[edytuj] Suma kontrolna

W przypadku REGONów 14-cyfrowych cyfrę kontrolną oblicza się następująco:

Wagi: 2 4 8 5 0 9 7 3 6 1 2 4 8

Pierwsze trzynaście cyfr REGON: 1 2 3 4 5 6 7 8 5 1 2 3 4

Wynik: 1*2 + 2*4 + 3*8 + 4*5 + 5*0 + 6*9 + 7*7 + 8*3 + 5*6 + 1*1 + 2*2 + 3*4 + 4*8 = 260

Cyfra kontrolna: 260 mod 11 = 7

Cały REGON: 12345678512347

[edytuj] Implementacja algorytmu w języku Python

def check_REGON(regon): 
	weights = {
		7: (2, 3, 4, 5, 6, 7),
		9: (8, 9, 2, 3, 4, 5, 6, 7),
		14: (2, 4, 8, 5, 0, 9, 7, 3, 6, 1, 2, 4, 8),
	}
 
	try:
		regon     = map(int, regon)
		weights   = weights[len(regon)]
	except:
		return False     
 
  checksum = sum(n * w for n, w in zip(regon, weights))
 
  return checksum % 11 % 10 == regon[-1]

[edytuj] Implementacja algorytmu w języku Ruby

  def valid_regon?(regon_string)
    case regon_string.size
    when 7
      weights = [2, 3, 4, 5, 6, 7]
    when 9
      weights = [8, 9, 2, 3, 4, 5, 6, 7]
    when 14
      weights = [2, 4, 8, 5, 0, 9, 7, 3, 6, 1, 2, 4, 8]
    else
      return false
    end
    regon_string = regon_string.split(//).map {|d| d.to_i }
    checksum = 0
    weights.each_with_index { |w, i| checksum += w * regon_string[i] }
 
    return checksum % 11 % 10 == regon_string.last
  end

[edytuj] Implementacja algorytmu w języku PHP

function CheckRegon( $regon ) 
{
	switch( strlen( $regon ) )
	{
		case 7:
			$weights = array(2, 3, 4, 5, 6, 7);
			break;
		case 9:
			$weights = array(8, 9, 2, 3, 4, 5, 6, 7);
			break;
		case 14:
			$weights = array(2, 4, 8, 5, 0, 9, 7, 3, 6, 1, 2, 4, 8);
			break;
		default:
			return false;
	}
 
	$checksum = 0;
 
	foreach( $weights as $i => $w )
	{
		$checksum += $w * $regon[$i];
	}
 
	return $checksum % 11 % 10 == substr( $regon, -1, 1 );
}

[edytuj] Implementacja algorytmu w języku PL/SQL

CREATE OR REPLACE FUNCTION PKCORE."WALIDUJ_REGON" (p_regon VARCHAR) RETURN VARCHAR2 AS
crc NUMBER;
v_last NUMBER;
BEGIN
IF LENGTH(p_regon) = 9 THEN
crc:= 8 * TO_NUMBER(SUBSTR(p_regon,1,1))
    + 9 * TO_NUMBER(SUBSTR(p_regon,2,1))
    + 2 * TO_NUMBER(SUBSTR(p_regon,3,1))
    + 3 * TO_NUMBER(SUBSTR(p_regon,4,1))
    + 4 * TO_NUMBER(SUBSTR(p_regon,5,1))
    + 5 * TO_NUMBER(SUBSTR(p_regon,6,1))
    + 6 * TO_NUMBER(SUBSTR(p_regon,7,1))
    + 7 * TO_NUMBER(SUBSTR(p_regon,8,1));
    v_last:=TO_NUMBER(SUBSTR(p_regon,9,1));
ELSIF LENGTH(p_regon) = 14 THEN
crc:=2 * TO_NUMBER(SUBSTR(p_regon,1,1))
    +4 * TO_NUMBER(SUBSTR(p_regon,2,1))
    +8 * TO_NUMBER(SUBSTR(p_regon,3,1))
    +5 * TO_NUMBER(SUBSTR(p_regon,4,1))
    +0 * TO_NUMBER(SUBSTR(p_regon,5,1))
    +9 * TO_NUMBER(SUBSTR(p_regon,6,1))
    +7 * TO_NUMBER(SUBSTR(p_regon,7,1))
    +3 * TO_NUMBER(SUBSTR(p_regon,8,1))
    +6 * TO_NUMBER(SUBSTR(p_regon,9,1))
    +1 * TO_NUMBER(SUBSTR(p_regon,10,1))
    +2 * TO_NUMBER(SUBSTR(p_regon,11,1))
    +4 * TO_NUMBER(SUBSTR(p_regon,12,1))
    +8 * TO_NUMBER(SUBSTR(p_regon,13,1));
    v_last:=TO_NUMBER(SUBSTR(p_regon,14,1));
ELSE
    RETURN('ERR');
END IF;
    crc:=MOD(crc,11);
    IF crc=10 THEN
        crc:=0;
    END IF;
    IF v_last = crc THEN
        RETURN 'OK';
    ELSE
        RETURN 'ERR';
    END IF;
    EXCEPTION WHEN OTHERS THEN RETURN 'ERR';
END;


[edytuj] Zobacz też

[edytuj] Linki zewnętrzne

Utwórz książkę
W innych językach