N-Numbers
Monday, November 25, 2013
In the United States, “N-Numbers” are the name given to aircraft registrations. Some of the services that the FAA provides include the ability to lookup aircraft by N-Number or reserve an N-Number.
Below we implement the rules to detect if a string is a valid N-Number in Factor.
- may not begin with zero.
- may not be the letters “I” or “O” to avoid confusion with the numbers one or zero.
: (n-number?) ( digits letters -- ? )
[ dup first CHAR: 0 = [ drop f ] [ [ digit? ] all? ] if ]
[ [ [ Letter? ] [ "IiOo" member? not ] bi and ] all? ]
bi* and ;
- may be one to five numbers (e.g., N12345).
- may be one to four numbers and one suffix letter (e.g., N1A and N1234Z).
- may be one to three numbers and two suffix letters (e.g., N24BY and N123AZ).
: n-number? ( str -- ? )
"N" ?head drop {
[ { [ length 1 5 between? ] [ f (n-number?) ] } 1&& ]
[ { [ length 2 5 between? ] [ 1 cut* (n-number?) ] } 1&& ]
[ { [ length 3 5 between? ] [ 2 cut* (n-number?) ] } 1&& ]
} 1|| ;
Registration numbers N1 through N99 are reserved for Federal Aviation Administration (FAA) internal use and are not available.
: reserved? ( str -- ? )
"N" ?head drop
{ [ length 1 2 between? ] [ [ digit? ] all? ] } 1&& ;
The code and some tests for this is on my GitHub.