Numer NHI
National Health Index (NHI) to unikalny identyfikator osoby używany w nowozelandzkim systemie opieki zdrowotnej . Z technicznego punktu widzenia nie jest to liczba, ale identyfikator alfanumeryczny składający się z 7 znaków, z trzech liter i czterech cyfr. Jest często określany jako NHI, chociaż należy zachować ostrożność podczas używania tego skróconego terminu, ponieważ NHI może również odnosić się do krajowego zbioru danych demograficznych użytkowników opieki zdrowotnej (którego unikalnym identyfikatorem jest numer NHI ) .
Numer NHI, jako część NHI, powstał w 1993 roku.
Stosowanie
Przede wszystkim NHI służy do jednoznacznej identyfikacji osób w systemie opieki zdrowotnej Nowej Zelandii , zwłaszcza w systemach elektronicznych. Przykładem tego jest jego użycie do ostrzegania pracowników służby zdrowia za pomocą Systemu Ostrzeżeń Medycznych (MWS) o zagrożeniach związanych z podejmowaniem decyzji medycznych dla określonych pacjentów.
Format
Numery NHI mają format LLLNNNC, gdzie L to litera (z wyłączeniem I i O), N to cyfra, a C to cyfra kontrolna . (np. ABC1235) Przypisanie pierwszych znaków jest dowolne i nie ma związku z osobą, której jest przypisane. Numer NHI jest najczęściej przedstawiany za pomocą wielkich liter alfabetu. Format przewiduje 13 824 000 unikalnych numerów NHI.
Numery NHI są często określane jako ważne lub nieważne. Każdy numer NHI, który nie pasuje do prawidłowego formatu lub zawiera nieprawidłową cyfrę kontrolną, jest określany jako nieważny. Zwykle odniesienie do ważnego lub nie ważnego numeru NHI nie wskazuje, że jest on prawidłowo powiązany z właściwą osobą. Ponieważ identyfikator jest dowolny, nie można tego zrobić wyłącznie na podstawie samego identyfikatora.
Dostępne są pakiety open source do sprawdzania ważności numerów NHI:
- R - ( nhiValidator )
- JavaScript — ( walidator nhi )
- Python - ( python-nhi )
Oczekuje się, że istniejący zakres zostanie wyczerpany po 2025 roku. W 2019 roku znowelizowana norma wprowadziła nowy format LLLNNLX, gdzie X jest literową cyfrą kontrolną (np. ABC12DV). Nowy format będzie dostępny do alokacji od lipca 2022 r. i zapewni dodatkowe 33 177 600 unikalnych numerów NHI. Te dwa formaty będą współistnieć w nieskończoność, a wszystkie systemy administracyjne i kliniczne będą musiały obsługiwać je oba.
Wszystkie numery NHI zaczynające się na literę Z są zarezerwowane do celów testowych.
Duplikaty
W przypadku stwierdzenia, że danej osobie przypisano więcej niż jeden numer NHI, jeden z nich jest uważany za główny identyfikator. Zwykle odbywa się to poprzez uszeregowanie wszystkich przypisanych numerów w kolejności alfanumerycznej i wybranie pierwszego jako głównego.
Wszystkie inne numery NHI dla osoby w ramach NHI są następnie łączone z numerem głównym.
Cyfra kontrolna
Istnieją dwa warianty algorytmu cyfry kontrolnej, aby umożliwić stary format numerów NHI z cyfrową cyfrą kontrolną, podczas gdy nowy format ma alfabetyczny znak kontrolny. Zmiana polegająca na stosowaniu alfabetycznej cyfry kontrolnej miała na celu rozwiązanie wcześniej zidentyfikowanej słabości polegającej na tym, że proste błędy transkrypcji pojedynczego znaku nie zawsze są wykrywane przez stary schemat cyfry kontrolnej. Nowa implementacja algorytmu stwarza jednak sytuację, w której kolizje w cyfrze kontrolnej są znacznie bardziej prawdopodobne w przypadku prostych błędów transkrypcji pojedynczego znaku.
W nowym formacie każdemu znakowi alfabetu przypisuje się wartość liczbową równą jego pozycji porządkowej w wersji alfabetu, w której pominięto litery I i O. Zakres porządkowy to 1–24. Daje to na przykład A=1 i Z=24. W obliczeniach używany jest każdy znak numeryczny z jego wartością nominalną 0–9.
Równoważna wartość liczbowa każdego znaku jest następnie mnożona przez jego odwrotną pozycję porządkową w numerze NHI. Pierwsza wartość jest mnożona przez 7, druga przez 6, trzecia przez 5, czwarta przez 4, piąta przez 3, a szósta przez 2. Obliczana jest suma sześciu produktów. Obliczona suma modulo 24 jest odejmowana od 24 w celu uzyskania numeru indeksu. Jeśli numer indeksu wynosi zero, numer NHI jest nieprawidłowy i nie można go użyć.
W starym formacie numer NHI zawiera cyfrę kontrolną. Algorytm generowania cyfry opisano poniżej:
Każdy znak alfa ma reprezentację numeryczną odpowiadającą jego pozycji porządkowej w alfabecie, zaczynając od A do Z. Litery I i O są pomijane, tworząc zakres porządkowy 1 - 24.
Numeryczna reprezentacja każdego znaku alfa jest mnożona przez odwrotność jego pozycji porządkowej w numerze NHI. Pierwsza wartość jest mnożona przez 7, druga przez 6 i tak dalej.
Pierwsze 3 znaki numeryczne są również mnożone przez odwrotność ich pozycji porządkowej.
Suma tych mnożeń moduł 11 odjęty od 11 jest traktowany jako cyfra kontrolna (wynik 10 jest tłumaczony na 0).
Ten schemat jest podobny do schematu cyfry kontrolnej ISBN.
Kod PHP do obliczania walidacji NHI dla starego formatu
/** * @param $nhi_number Numer NHI do sprawdzenia * @return bool Prawda, jeśli jest poprawna, fałsz, jeśli nie jest poprawna * @author jakiś.jeden[at]example.com */ function validateNHINumber_old ( string $nhi_number ) : bool { / / Wstępne sprawdzenie formatu if ( ! preg_match ( '/^([a-zA-Z]){3}([0-9]){4}?$/' , $nhi_number )) { return false ; }
0
0
// Podziel łańcuch znaków w tablicy $chars = preg_split ( '//' , strtolower ( $nhi_number ), - 1 , PREG_SPLIT_NO_EMPTY ); $suma = ; // Przejrzyj pierwsze sześć znaków, zignoruj siódmy znak, ponieważ jest to cyfra kontrolna dla ( $i = ; $i < 6 ; $i ++ ) { $char = $chars [ $i
]; // Pierwsze trzy znaki alfa mają reprezentację numeryczną odpowiadającą // ich porządkowej pozycji w alfabecie, zaczynając od A do Z. Litery // I i O są pomijane, tworząc zakres porządkowy 1 - 24. if ( $ i < 3 ) { $ascii = ord ( $znaki [ $i ]); if ( $ascii > 105 ) { if ( $ascii > 111 ) {
$ascii -= 2 ; } else { $ascii -= 1 ; } } $znak = $ascii - 96 ; } // Reprezentacja liczbowa każdego znaku alfa jest mnożona przez // odwrotność jego pozycji porządkowej w numerze NHI. Pierwsza // wartość jest mnożona przez 7, druga przez 6 i tak dalej. $suma += (( int ) $char * ( 7 - $i )); }
0
// Zastosuj moduł 11, aby utworzyć sumę kontrolną. $suma kontrolna = ( float ) fmod ( $suma , 11 ); $cyfra kontrolna = 11 - $suma kontrolna ; // Jeśli suma kontrolna wynosi zero, to numer NHI jest nieprawidłowy if ( $checksum == ) { return false ; } // Jeśli cyfra kontrolna jest równa 10, przekonwertuj na zero , jeśli (( int ) $ cyfra kontrolna == 10
0
) { $cyfra kontrolna = ; } // Czwarta liczba musi być równa cyfrze kontrolnej , aby numer NHI był poprawny (( int ) $chars [ 6 ] == $ cyfra kontrolna ); } echo ( int ) validateNHINumber_old ( 'DAB8233' ); // 0 (nieprawidłowy) echo ( int ) validateNHINumber_old ( 'CGC2720' ); // 1 (ważny)
echo ( int ) validateNHINumber_old ( 'EPT6335' ); // 1 (ważny)
Formuły programu Excel do sprawdzania poprawności numerów NHI w starych, nowych i obu formatach
Te formuły wymagają programu Excel w wersji 2010 lub nowszej (lub równoważnej). Formuły zakładają, że dane wejściowe to znaki alfanumeryczne i wielkie litery. Sprawdzane są, czy ciąg składa się z 7 znaków, czy nie ma liter „I” i „O” oraz czy znaki alfanumeryczne znajdują się we właściwych miejscach. Formuły zwracają PRAWDA dla prawidłowego NHI lub FAŁSZ, jeśli nie.
Stary format
= AND ( JEŻELI ( DŁUG ( A2 ) = 7 , PRAWDA , FAŁSZ ), NIE ( CZY. LICZBA ( ZNAJDŹ ( " I " , A2 ))), NIE ( CZY . LICZBA ( ZNAJDŹ ( " O " , A2 ))), CZY.TEKST ( LEWY ( A2 , 3 )), JEŻELI ( CZY.LICZBA
( WARTOŚĆ ( PRAWA ( A2 , 4 ))), 11 - MOD ( 7 * JEŻELI ( CZY.BŁ. ( ŚRODEK ( A2 , 1 , 1 ) * 1 ), JEŻELI ( KOD ( ŚRODEK ( A2 , 1 , 1 )) > 79 , KOD ( ŚRODEK ( A2 1 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ -64 )), ŚRODEK ( A2 ,
1 , 1 )) + 6 * JEŻELI ( CZY.BŁ. ( MID ( A2 , 2 , 1 ) * 1 ), JEŻELI ( KOD ( MID ( A2 , 2 , 1 )) > 79 , KOD ( MID ( A2 , 2 , 1 ) ) -66 , JEŚLI (
KOD ( ŚRODEK ( A2 , 2 , 1 )) > 72 , KOD ( ŚRODEK ( A2 , 2 , 1 )) -65 , KOD ( ŚRODEK ( A2 , 2 , 1 )) -64 )), ŚRODEK ( A2 , 2 , 1 )) + 5 * JEŻELI ( CZY.BŁ. ( ŚRODEK ( A2 , 3 , 1 ) * 1 ), JEŻELI ( KOD ( ŚRODEK ( A2 , 3 , 1 )) > 79 , KOD ( ŚRODEK ( A2 , 3 , 1 )) -66 , JEŻELI ( KOD ( ŚRODEK ( A2 , 3 , 1
)) > 72 , KOD ( MID ( A2 , 3 , 1 )) -65 , KOD ( MID ( A2 , 3 , 1 )) -64 )), MID ( A2 , 3 , 1 )) + 4 * JEŚLI ( NIE ( CZY.SERR ( ŚRODEK ( A2 , 4 1 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ * JEŻELI ( NIE ( CZY.SERR (
ŚRODEK ( A2 , 6 , 1 ) * 1 )), ŚRODEK ( A2 , 6 , 1 )), 11 ) = JEŻELI ( NIE ( CZY.BŁ. ( ŚRODEK ( A2 , 7 , 1 ) * 1 )), ŚRODEK ( A2 , 7 , 1 ) * 1 )))
Nowy format
= AND ( DŁ ( A2 ) = 7 , NIE ( CZY.LICZBA ( ZNAJDŹ ( " I " , A2 ))), NIE ( CZY. LICZBA ( ZNAJDŹ ( " O " , A2 ))), NIE ( CZY.LICZBA ( ŚRODEK ( A2 , 4 , 2 ) * 1 )), 24 - MOD
( 7 * JEŻELI ( CZY . BŁ. ( MID ( A2 , 1 , 1 ) * 1 ), JEŻELI ( KOD ( MID ( A2 , 1 , 1 )) > 79 , KOD ( MID ( A2 , 1 , 1 )) -66 , JEŻELI ( KOD ( ŚREDNI (
A2 , 1 , 1 )) > 72 , KOD ( ŚRODEK ( A2 , 1 , 1 )) -65 , KOD ( ŚRODEK ( A2 , 1 , 1 )) -64 )), ŚRODEK ( A2 , 1 , 1 )) + 6 * JEŻELI ( CZY.SERR ( ŚREDNIA ( A2 , 2 , 1 ) * 1 ), JEŻELI ( KOD ( MID ( A2 , 2 , 1 )) > 79 , KOD ( MID ( A2 , 2 , 1 )) -66 , JEŻELI ( KOD ( MID ( A2 , 2 , 1 )) > 72 ,
KOD ( MID ( A2 , 2 , 1 )) -65 , KOD ( MID ( A2 , 2 , 1 )) -64 )), MID ( A2 , 2 , 1 )) + 5 * JEŻELI ( CZY. BŁ. ( MID ( A2 , 3 , 1 ) * 1 ), JEŻELI ( KOD ( MID ( A2 , 3 , 1 )) > 79 , KOD ( MID ( A2 , 3 , 1 )) -66 , JEŻELI ( KOD ( MID ( A2 , 3 , 1 )) > 72 , KOD ( MID ( A2 ) , 3 , 1
)) -65 , KOD ( ŚRODEK ( A2 , 3 , 1 )) -64 )), ŚRODEK ( A2 , 3 , 1 )) + 4 * JEŻELI ( NIE ( CZY.BŁ. ( ŚRODEK ( A2 , 4 , 1 ) * 1 ) ), ŚRODEK ( A2 , 4 , 1 ))
+ 3 * JEŻELI ( NIE ( CZY.BŁ. ( ŚRODEK ( A2 , 5 , 1 ) * 1 )), ŚRODEK ( A2 , 5 , 1 )) + 2 * JEŻELI ( CZY.BŁ. ( ŚRODEK ( A2 , 6 , 1 ) * 1 ), JEŻELI ( KOD ( ŚREDNI ( A2 , 6 , 1 )) > 79 , KOD ( MID ( A2 , 6 , 1 )) -66 , JEŻELI ( KOD ( MID ( A2 , 6 , 1 )) > 72 , KOD ( MID ( A2 , 6 , 1 ) )) -65 , KOD
( MID ( A2 , 6 , 1 )) -64 )), MID ( A2 , 6 , 1 )), 24 ) = JEŻELI ( CZY.BŁ. ( MID ( A2 , 7 , 1 ) * 1 ), JEŻELI ( KOD ( MID ( A2 , 7 , 1 )) > 79 , KOD ( MID ( A2 , 7 , 1 )) -66 , JEŻELI ( KOD ( MID ( A2 , 7 , 1 )) > 72 , KOD ( MID ( A2 , 7 , 1 )) -65 , KOD ( MID ( A2 ) , 7 , 1 )) -64 )), ŚRODEK ( A2 , 7 , 1 )))
Oba formaty
= AND ( DŁ ( A2 ) = 7 , NIE ( CZY . LICZBA ( ZNAJDŹ ( " I " , A2 ))), NIE ( CZY . LICZBA ( ZNAJDŹ ( " O " , A2 ))), NIE ( CZY . 2 ) * 1 )), JEŻELI (
CZY.BŁ. ( ŚROD. ( A2 , 6 , 1 ) * 1 ), 24 - MOD ( 7 * JEŚLI ( CZY..BŁ. ( ŚRODEK ( A2 , 1 , 1 ) * 1 ), JEŻELI ( KOD ( ŚRODEK ( A2 , 1 , 1 )) > 79 , KOD ( MID ( A2 , 1 , 1 )) -66 , JEŚLI ( KOD ( MID ( A2 , 1 , 1 )) > 72 , KOD ( MID ( A2 , 1 , 1 )) -65 , KOD ( MID ( A2 , 1 , 1 )) -64 )), ŚRODEK
( A2 , 1 , 1 ) ) + 6 * JEŚLI ( CZY.BŁ. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ , 1 )) -66
, JEŻELI ( KOD ( ŚRODEK ( A2 , 2 , 1 )) > 72 , KOD ( ŚRODEK ( A2 , 2 , 1 )) -65 , KOD ( ŚRODEK ( A2 , 2 , 1 )) -64 )), MID ( A2 , 2 , 1 )) + 5 * JEŻELI ( CZY.BŁ ( ŚRODEK ( A2 , 3 , 1 ) * 1 ), JEŻELI ( KOD ( ŚRODEK ( A2 , 3 , 1 )) > 79 , KOD ( ŚRODEK ( A2 , 3 , 1 )) -66 , JEŻELI ( KOD ( ŚRODEK ( A2 , 3
, 1 )) > 72 , KOD ( MID ( A2 , 3 , 1 )) -65 , KOD ( MID ( A2 , 3 , 1 )) -64 )), MID ( A2 , 3 , 1 )) + 4 * JEŚLI ( NIE ( CZY.SERR ( ŚRODEK ( A2
, 4 , 1 ) * 1 )), ŚRODEK ( A2 , 4 , 1 )) + 3 * JEŻELI ( NIE ( CZY.BŁ. ( ŚRODEK ( A2 , 5 , 1 ) * 1 )), ŚRODEK ( A2 , 5 , 1 )) + 2 * JEŻELI ( CZY.SERR ( MID ( A2 , 6 , 1 ) * 1 ), JEŻELI ( KOD ( MID ( A2 , 6 , 1 )) > 79 , KOD ( MID ( A2 , 6 , 1 )) -66 , JEŻELI ( KOD ( MID ( A2 , 6 , 1 )) >
72 , KOD ( ŚRODEK ( A2 , 6 , 1 )) -65 , KOD ( ŚRODEK ( A2 , 6 , 1 )) -64 )), ŚRODEK ( A2 , 6 , 1 )), 24 ) = JEŻELI ( CZY.SERR ( ŚRODEK ( A2 , 7 , 1 ) * 1 ) . _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ŚRODEK ( A2 , 7
, 1 )) -65 , KOD ( MID ( A2 , 7 , 1 )) -64 )), MID ( A2 , 7 , 1 )), 11 - MOD ( 7 * JEŻELI ( CZY.BŁ. ( MID ( A2 , 1 , 1) ) * 1 ), JEŻELI ( KOD ( ŚRODEK ( A2 , 1 , 1 )) > 79 , KOD ( MID ( A2 , 1 , 1 )) -66 , JEŚLI ( KOD ( MID ( A2 , 1 , 1 )) > 72 , KOD ( MID ( A2 , 1 , 1 )) -65 , KOD
( MID ( A2 , 1 , 1 )) -64 )), MID ( A2 , 1 , 1 )) + 6 * JEŻELI ( CZY.BŁ. ( MID ( A2 , 2 , 1 ) * 1 ), JEŻELI ( KOD ( MID ( A2 , 2 , 1 )) > 79 , KOD ( MID ( A2 , 2 , 1 )) -66 , JEŚLI ( KOD ( MID ( A2 , 2 , 1 )) > 72 , KOD ( MID ( A2 , 2 , 1 )) -65 , KOD ( MID ( A2 ) , 2 , 1 ))
-64 )), MID ( A2 , 2 , 1 )) + 5 * JEŻELI ( CZY.BŁ ( MID ( A2 , 3 , 1 ) * 1 ), JEŻELI ( KOD ( MID ( A2 , 3 , 1 )) > 79 , KOD ( ŚRODEK ( A2 , 3 , 1 )) -66 , JEŻELI ( KOD ( MID ( A2 , 3 , 1 )) > 72 , KOD ( MID ( A2 , 3 , 1 )) -65 , KOD ( MID ( A2 , 3 , 1 )) -64 ) ), ŚRODEK ( A2 , 3 , 1
)) + 4 * JEŻELI ( NIE ( CZY . BŁ. ( ŚRODEK ( A2 , 4 , 1 ) * 1 )), ŚRODEK ( A2 , 4 , 1 )) + 3 * JEŻELI ( NIE ( CZY .. ŚRODEK ( A2 , 5 , 1 ) * 1 )), ŚREDNI (
A2 , 5 , 1 )) + 2 * JEŻELI ( NIE ( CZY . BŁ. ( ŚRODEK ( A2 , 6 , 1 ) * 1 )), ŚRODEK ( A2 , 6 , 1 )), 11 ) = JEŻELI ( NIE ( CZY. BŁ . ( ŚRODEK ( A2 , 7 , 1 )
* 1 )), ŚRODEK ( A2 , 7 , 1 ) * 1 ) ))