Dave Robbins, K1TTT's call checking code has been implemented in the program. When a callsign is entered it is checked against a pattern file to see if the callsign entered is a possible callsign. A warning will be given when this is not true. The messages appears in the check window.
This feature can really help our UBN rates if we get good rules!
Note that the call checking function only works for HF (no WARC) and CW/SSB and only when nothing is found in the CHECK window. So not for RTTY etc. and not on VHF and up!
![]() |
****WARNING**** Do not assume that if the program gives a warning that the callsign is not possible and has to be removed from the log. Some of these rules could already be outdated due to countries changing callsign sequences or issuing special contest calls. |
Unfortunately many countries have changed their callsign assignment process over the last years and many will change the coming years. Because of this the rules may not be valid. The rules are in the callsign.pat file in the program directory. The rules need constant updating, so if you have any rules or find broken rules for your country, please post them.
Note the following:
When reviewing the rules please look mostly at the text messages, these should give you a basic explanation of what the rule is. When you send updates please give a short description of what the rule is, similar to the text messages already in. Write longer explanations if needed to explain all the nuances of a particular callsign rule. If you can't make up the code part for the particular callsign scheme just send it in and we will help. If a rule in the file now is no longer valid please include both lines from the file in your message and an explanation or example of why it is no longer a bad call pattern.
At present the rule file is limited to 200 rules, but can easily be expanded.
![]() |
Please do not to make up rules just for oneself. This is a golden opportunity to give back to the group with your knowledge of your home country's call sign standards. |
A rule 'pattern' descibes a bad callsign character by character. As long as the call matches the pattern the procedure continues. If the pattern runs out before the end of the callsign then the rest is assumed to match. If the callsign runs out of characters first then it doesn't match and the call is passes as good.
The components that make up a 'rule' are:
Single characters: | |
|
match the letter 'A' |
|
match the number '1' |
|
Etc. |
Repetition flags
|
|
These must be followed by a character
type specifier:
|
|
To make up phrases like:
|
|||
|
Match one |
|
match any character (A-Z, 0-9) |
|
match one of any digit | ||
|
Match one or more |
|
match any letter(A-Z) |
|
match one of any digit | ||
|
match zero or more |
|
match any digit (0-9) |
|
match zero or more letters or digits | ||
|
optional match |
|
|
optionally match one digit |
Groups of characters to match:
|
|
Which can make up phrases like
|
||
|
match |
|
match a,b,c,f,x, or z | |
|
match any characters not in list |
|
match anything other than a,b, or c | |
|
match a range of characters |
|
match anything other than letters a to r |
More info is given below like checking bands and modes.
The following are some simple examples of patterns and what they match or don't match.
Pattern
|
Pattern matches
|
Pattern doesn't match
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
First, what do we do with a match?? Well, if a callsign matches one of the patterns a message appears in the check window. Therefore we make up rules that specify what a 'bad' call is, like:
Then we try to make a pattern that will match only calls fitting that rule.
Unfortunately some countries have made the job a bit harder by restricting certain types of calls to certain bands and modes. I.E. the HJ prefix is only used on CW or 40m and 80m SSB. So we need some way to specify rules for those calls. So what I do is append the band and mode information to the end of the callsign before it goes through the pattern matcher. What it looks like then is this: "BY1AA=4S" where the '=' is added at the end of the call, followed by the band number (1=160m, 2=80m, ... 6=10m) and the mode (S=SSB, C=CW, O=Other modes). Now we can make rules that apply to specific bands and not have another mechanism to remember. This also helps us by marking the end of the call with the '=' sign, so now we can sort out calls that have to have specific lengths.
This means the following combinations can be made to specify bands and modes:
=3C match a '3' (40meters) followed by "C"
for CW, call would be bad on 40m CW.
=4 match just a '4' for 20m either
mode, call would be bad on 20m any mode.
=:DS match any band, but only for SSB, call would be bad
on SSB on any band.
Which for our rule that is valid only on CW or 40/80 SSB means that it is bad on any other band or on ssb so we could do: =[1456]S which means the call is bad on 160, 20, 15, or 10m SSB
Also, before a call is sent through the pattern matcher any portable part of the call is removed. This way a /QRP, /A, /MM, /CT3 etc. does not affect the checking of the basic callsign.
Now, back to some of the cases mentioned earlier and how to make up rules for them.
1. Calls that start with 3 letters
This is fairly easy, all we need is a rule that will 'match' if the first
3 characters are letters. Since the :A phrase says to match any one letter we
can use that to get the rule:
:A:A:A
Notice, that since we are only worried about the first 3 characters of the
call we don't have to go past that in the rule. This makes use of the property
that says if the rule runs out before the callsign does the rest is assumed
to match.
2. Call with first letter B with prefix other than BT,BV,BY,BZ
This is a bit harder, but at least we only have to deal with the first 2 characters
of the call. First, we only want this to apply to calls that start with a 'B'.
Then if the second character is not one of the group 'TVYZ' we want it to 'match'.
So we get the rule: B[!TVYZ]
This is the same as above, if we match the 'B', and then the next character
is not one of the set "TVYZ" we don't care what the rest of the call
might be.
3. French calls with a 1 or 6 that don't have 3 character suffix
Now this is a real test of the capability of the rules and how well you understand
them. First we need calls that start with 'F', followed by a '1' or '6'. Then
we need to match one or two character
suffixes to reject suffixes that are too short. For this we will use one of
the 'optional' matches for the second letter of the suffix to get: F[16]:A-A=
Note how we have the ":A-A" which will match one letter, then optionally
another letter. We can not use "+A" in this case because that would
also match 3 letters. Then the '=' will anchor the end of the rule so that if
there was a third letter in suffix it would not match the '=' and the call would
pass as good. Unfortunately the French also use other preffixes like FB, FD,
FE, FF that follow the same rule. But this can not be combined be cause of other
calls that also start with F and don't necessarily have 3 letter suffixes. Calls
like FR, FS, FJ, FC, FT may not fit the 3 letter rule. This means we need a
second rule to finish this problem to specify the other French prefixes we want
to check for 3 letter suffixes. To cover this we get the rule: F[BDEF][16]:A-A=
Which will match French 2 letter prefixes followed by a '1' or '6' with only
1 or 2 letter suffixes.
4. East German calls that don't end in A to O
Now here is the killer. Fortunately all these calls have been replaced, but
it is still a good example and will probably be very similar to some of the
Russian rules for suffixes. First we want to match calls that start with 'Y',
followed by a digit from 2 to 9, followed by another digit from 0 to 9, then
there could be one, two, or in rare cases three letter suffix that must end
with a letter in the range of 'A' to 'O'. With all this in mind we get the rules:
Y[2-9]:D[!A-O]= for single letter suffix.
Y[2-9]:D:A[!A-O]= for 2 letter suffix.
Y[2-9]:D:A:A[!A-O]= for rare 3 letter suffix.
Again we ended up with multiple rules, in this case because if we had used a
'+A' or '*A' it would have also matched the last letter that we wanted to check
specifically.
Now if you look in the file CALLSIGN.PAT you will see all the rules that I have come up with. Each rule also has a line giving the explanation for it. This explanation is shown as a messages in the check window. You will note that some of them are not hard rules, only that the call is rarely used.
Now you should all be experts at making rules for bad callsigns. When you come up with a new pattern you can test it by entering the callsign in the callsign field.
It is possible to come up with rules that you can't get to in the file. For instance a call like "HI500ABC" would always be rejected by the "CALL TOO LONG" rule near the top of the file, so if you tried to come up with a specific rule saying that HI500 calls only have 2 letter suffixes you would not get to it unless you put it before the rule for maximum callsign length.
Some of the 'Generic' rules will reject calls that may be good. The special calls using extra long numbers, like the "HI500ABC" above may very well be a legal call. But since these should be relatively few, especially during a contest, I feel it is better to have them shown in the check window and let the operator determine if they are correct than to try to come up with rules that may only be used once.