Skip to content

Instantly share code, notes, and snippets.

@leoherzog
Last active January 17, 2019 21:40
Show Gist options
  • Select an option

  • Save leoherzog/0d725c905b65a56326b64c3e98aa6c76 to your computer and use it in GitHub Desktop.

Select an option

Save leoherzog/0d725c905b65a56326b64c3e98aa6c76 to your computer and use it in GitHub Desktop.
Amateur (Ham) Radio US Vanity Callsign Rules for Javascript
// http://www.arrl.org/vanity-call-signs
String.prototype.isValidCallsign = function() {
const sign = this.toString().toUpperCase().trim();
// quick obvious check that might save time in large sets
if (sign.length < 3 || sign.length > 6) {
return false;
}
// the general structure of the us callsign
var validSign = /^[AKNW][A-Z]?[0-9][A-Z]{1,3}$/;
if (!validSign.test(sign)) {
return false;
}
// it's a valid sign so far. now to test if it breaks
// specific fcc rules about what it can't be
var rule1 = /^KA[2-9][A-Z]{2}$/.test(sign);
var rule2 = /^KC4AA[A-F]$/.test(sign);
var rule3 = /^KC4US[A-Z]$/.test(sign);
var rule4 = /^KG4[A-Z]{2}$/.test(sign);
var rule5 = /^KC6[A-Z]{2}$/.test(sign);
var rule6 = /^KL9K[A-H][A-Z]$/.test(sign);
var rule7 = /^KX6[A-Z]{2}$/.test(sign);
var rule8 = /SOS/g.test(sign);
var rule9 = /Q[R-U][A-Z]/g.test(sign);
var rule10 = /^A[M-Z]/.test(sign);
var rule11 = sign.length == 6 && sign.charAt(3) == "X";
var rule12 = /^[AKNW]F[0-9]EMA$/.test(sign);
var rule13 = sign.length == 6 && /^A{A-L}/.test(sign);
var rule14 = sign.length == 6 && /^N[A-Z]/.test(sign);
var rule15 = sign.length == 6 && /^W[CKMRT]/.test(sign);
var rule16 = /^[KNW]P[06789]/.test(sign);
var rule17 = /^[KNW][0-9][A-Z]$/.test(sign);
// does it break any of the rules?
var breaksRules = rule1 || rule2 || rule3 || rule4 || rule5 || rule6 || rule7 || rule8 || rule9 || rule10 || rule11 || rule12 || rule13 || rule14 || rule15 || rule16 || rule17;
return !breaksRules;
}
console.log("kd8vyx".isValidCallsign());
console.log("blah".isValidCallsign());
console.log("aa8aa".isValidCallsign());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment