package main import "fmt" var ( magic1 = []int{ 275, 341, 547, 745, 395, 846, 172, 598, 785, } magic2 = []int{ 211, 463, 371, 185, 782, 146, 857, 143, 846, } magic3 = []int{ 17125, 12417, 14983, 1311, 16985, 13198, 12254, 15197, 14365, } serials = []string{ "127517125", "234112417", "354714983", "474501311", "539516985", "684613198", "717212254", "859815197", "978514365", } ) func Check(s string) bool { var c, susp, suspen int if len(s) != 9 { return false } n, _ := fmt.Sscanf(s, "%1d%3d%5d", &c, &susp, &suspen) if n != 3 || c < 1 { return false } c -= 1 return ((suspen ^ magic3[c]) % magic2[c]) == (susp ^ magic1[c]) } func main() { for _, s := range serials { fmt.Println(s, Check(s)) } }