first commit
This commit is contained in:
371
pkg/helper/NumberHelper.go
Normal file
371
pkg/helper/NumberHelper.go
Normal file
@ -0,0 +1,371 @@
|
||||
package helper
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"github.com/anxpp/beego/logs"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type NumberInfo struct {
|
||||
Level int
|
||||
Rule map[string]bool
|
||||
}
|
||||
|
||||
// 计算号码的登记
|
||||
func Calc(src int64) NumberInfo {
|
||||
level := 0
|
||||
rule := make(map[string]bool)
|
||||
number := strconv.FormatInt(src, 10)
|
||||
length := len(number)
|
||||
// 尾号AAA
|
||||
checkEndAAA := length >= 3 && number[length-1] == number[length-2] && number[length-2] == number[length-3]
|
||||
if checkEndAAA {
|
||||
level++
|
||||
}
|
||||
rule["EndAAA"] = checkEndAAA
|
||||
// 尾号ABAB
|
||||
checkABAB := length >= 4 && number[length-4] == number[length-2] && number[length-3] == number[length-1]
|
||||
if checkABAB {
|
||||
level++
|
||||
}
|
||||
rule["EndABAB"] = checkABAB
|
||||
// 尾号AABB
|
||||
checkAABB := length >= 4 && number[length-4] == number[length-3] && number[length-2] == number[length-1]
|
||||
if checkAABB {
|
||||
level++
|
||||
}
|
||||
rule["EndAABB"] = checkAABB
|
||||
// 520
|
||||
check520 := strings.HasSuffix(number, "520")
|
||||
if check520 {
|
||||
level++
|
||||
}
|
||||
rule["520"] = check520
|
||||
// 1314
|
||||
check1314 := strings.HasSuffix(number, "1314")
|
||||
if check1314 {
|
||||
level++
|
||||
}
|
||||
rule["1314"] = check1314
|
||||
// 5201314
|
||||
check5201314 := strings.HasSuffix(number, "5201314")
|
||||
if check5201314 {
|
||||
level++
|
||||
}
|
||||
rule["5201314"] = check5201314
|
||||
// AAA
|
||||
checkAAA := _checkRepeat(number, 3)
|
||||
if checkAAA {
|
||||
level++
|
||||
}
|
||||
rule["AAA"] = checkAAA
|
||||
// AAAA
|
||||
checkAAAA := _checkRepeat(number, 4)
|
||||
if checkAAAA {
|
||||
level++
|
||||
}
|
||||
rule["AAAA"] = checkAAAA
|
||||
// AAAAA
|
||||
checkAAAAA := _checkRepeat(number, 5)
|
||||
if checkAAAAA {
|
||||
level++
|
||||
level++
|
||||
}
|
||||
rule["AAAAA"] = checkAAAAA
|
||||
// AAAAAA
|
||||
checkAAAAAA := _checkRepeat(number, 6)
|
||||
if checkAAAAAA {
|
||||
level++
|
||||
}
|
||||
rule["AAAAAA"] = checkAAAAAA
|
||||
// AAAAAAA
|
||||
checkAAAAAAA := _checkRepeat(number, 7)
|
||||
if checkAAAAAAA {
|
||||
level++
|
||||
}
|
||||
rule["AAAAAAA"] = checkAAAAAAA
|
||||
// AAAAAAA
|
||||
checkAAAAAAAA := _checkRepeat(number, 8)
|
||||
if checkAAAAAAAA {
|
||||
level++
|
||||
}
|
||||
rule["AAAAAAAA"] = checkAAAAAAAA
|
||||
// ABCABC
|
||||
checkABCABC := _checkABCABC(number)
|
||||
if checkABCABC {
|
||||
level++
|
||||
}
|
||||
rule["ABCABC"] = checkABCABC
|
||||
// AABBCC
|
||||
checkAABBCC := _checkAABBCC(number)
|
||||
if checkAABBCC {
|
||||
level++
|
||||
}
|
||||
rule["AABBCC"] = checkAABBCC
|
||||
// ABABAB
|
||||
checkABABAB := _checkABABAB(number)
|
||||
if checkABABAB {
|
||||
level++
|
||||
}
|
||||
rule["ABABAB"] = checkABABAB
|
||||
// AAABBB
|
||||
checkAAABBB := _checkAAABBB(number)
|
||||
if checkAAABBB {
|
||||
level++
|
||||
}
|
||||
rule["AAABBB"] = checkAAABBB
|
||||
// ABBABB
|
||||
checkABBABB := _checkABBABB(number)
|
||||
if checkABBABB {
|
||||
level++
|
||||
}
|
||||
rule["ABBABB"] = checkABBABB
|
||||
// ABBCBB
|
||||
checkABBCBB := _checkABBCBB(number)
|
||||
if checkABBCBB {
|
||||
level++
|
||||
}
|
||||
rule["ABBCBB"] = checkABBCBB
|
||||
// BBCBBA
|
||||
checkBBCBBA := _checkBBCBBA(number)
|
||||
if checkBBCBBA {
|
||||
level++
|
||||
}
|
||||
rule["BBCBBA"] = checkBBCBBA
|
||||
// AABAAB
|
||||
checkAABAAB := _checkAABAAB(number)
|
||||
if checkAABAAB {
|
||||
level++
|
||||
}
|
||||
rule["AABAAB"] = checkAABAAB
|
||||
// 102030
|
||||
check102030 := _check102030(number)
|
||||
if check102030 {
|
||||
level++
|
||||
}
|
||||
rule["102030"] = check102030
|
||||
// 010203
|
||||
check010203 := _check010203(number)
|
||||
if check010203 {
|
||||
level++
|
||||
}
|
||||
rule["010203"] = check010203
|
||||
// AABBB
|
||||
checkAABBB := _checkAABBB(number)
|
||||
if checkAABBB {
|
||||
level++
|
||||
}
|
||||
rule["AABBB"] = checkAABBB
|
||||
// 123
|
||||
check123 := _checkIncrease(number, 3)
|
||||
if check123 {
|
||||
level++
|
||||
}
|
||||
rule["123"] = check123
|
||||
// 123
|
||||
check1234 := _checkIncrease(number, 4)
|
||||
if check1234 {
|
||||
level++
|
||||
}
|
||||
rule["1234"] = check1234
|
||||
// 123
|
||||
check12345 := _checkIncrease(number, 5)
|
||||
if check12345 {
|
||||
level++
|
||||
}
|
||||
rule["12345"] = check12345
|
||||
// 123
|
||||
check123456 := _checkIncrease(number, 6)
|
||||
if check123456 {
|
||||
level++
|
||||
}
|
||||
rule["123456"] = check123456
|
||||
// 123
|
||||
check1234567 := _checkIncrease(number, 7)
|
||||
if check1234567 {
|
||||
level++
|
||||
}
|
||||
rule["1234567"] = check1234567
|
||||
info := NumberInfo{level, rule}
|
||||
bytes, _ := json.Marshal(info)
|
||||
if src%100000 == 0 {
|
||||
logs.Info(number + ": " + string(bytes))
|
||||
}
|
||||
return info
|
||||
}
|
||||
|
||||
func _checkRepeat(number string, length int) bool {
|
||||
count := 1
|
||||
old := ' '
|
||||
for _, ch := range number {
|
||||
if ch == old {
|
||||
count++
|
||||
if count == length {
|
||||
return true
|
||||
}
|
||||
continue
|
||||
}
|
||||
old = ch
|
||||
count = 1
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func _checkIncrease(number string, length int) bool {
|
||||
count := 0
|
||||
old := ' '
|
||||
for _, ch := range number {
|
||||
if count <= 0 {
|
||||
count++
|
||||
if count == length {
|
||||
return true
|
||||
}
|
||||
old = ch
|
||||
continue
|
||||
}
|
||||
if ch == old+1 {
|
||||
count++
|
||||
if count == length {
|
||||
return true
|
||||
}
|
||||
old = ch
|
||||
continue
|
||||
}
|
||||
old = ch
|
||||
count = 0
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func _checkABCABC(number string) bool {
|
||||
length := len(number)
|
||||
if length >= 6 {
|
||||
for i := 3; i < length-2; i++ {
|
||||
if number[i-3] == number[i] && number[i-2] == number[i+1] && number[i-1] == number[i+2] {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func _checkABBABB(number string) bool {
|
||||
length := len(number)
|
||||
if length >= 6 {
|
||||
for i := 3; i < length-2; i++ {
|
||||
if number[i-3] == number[i] && number[i-2] == number[i+1] && number[i-1] == number[i+2] && number[i-2] == number[i-1] {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func _checkABBCBB(number string) bool {
|
||||
length := len(number)
|
||||
if length >= 6 {
|
||||
for i := 3; i < length-2; i++ {
|
||||
if number[i-2] == number[i-1] && number[i-1] == number[i+1] && number[i+1] == number[i+2] {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func _checkBBCBBA(number string) bool {
|
||||
length := len(number)
|
||||
if length >= 6 {
|
||||
for i := 3; i < length-2; i++ {
|
||||
if number[i-3] == number[i-2] && number[i-2] == number[i] && number[i] == number[i+1] {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func _checkAABAAB(number string) bool {
|
||||
length := len(number)
|
||||
if length >= 6 {
|
||||
for i := 3; i < length-2; i++ {
|
||||
if number[i-3] == number[i] && number[i-3] == number[i-2] && number[i-2] == number[i+1] && number[i-1] == number[i+2] {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func _check102030(number string) bool {
|
||||
length := len(number)
|
||||
if length >= 6 {
|
||||
for i := 3; i < length-2; i++ {
|
||||
if number[i-2] == number[i] && number[i] == number[i+2] && number[i-3]-number[i-1] == number[i-1]-number[i+1] {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func _check010203(number string) bool {
|
||||
length := len(number)
|
||||
if length >= 6 {
|
||||
for i := 3; i < length-2; i++ {
|
||||
if number[i-2]-number[i] == number[i]-number[i+2] && number[i-3] == number[i-1] && number[i-1] == number[i+1] {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func _checkAABBCC(number string) bool {
|
||||
length := len(number)
|
||||
if length >= 6 {
|
||||
for i := 3; i < length-2; i++ {
|
||||
if number[i-3] == number[i-2] && number[i-1] == number[i] && number[i+1] == number[i+2] {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func _checkABABAB(number string) bool {
|
||||
length := len(number)
|
||||
if length >= 6 {
|
||||
for i := 3; i < length-2; i++ {
|
||||
if number[i-3] == number[i-1] && number[i-1] == number[i+1] && number[i-2] == number[i] && number[i] == number[i+2] {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func _checkAAABBB(number string) bool {
|
||||
length := len(number)
|
||||
if length >= 6 {
|
||||
for i := 3; i < length-2; i++ {
|
||||
if number[i-3] == number[i-2] && number[i-2] == number[i-1] && number[i] == number[i+1] && number[i+1] == number[i+2] {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func _checkAABBB(number string) bool {
|
||||
length := len(number)
|
||||
if length >= 5 {
|
||||
for i := 3; i < length-2; i++ {
|
||||
if number[i-3] == number[i-2] && number[i-1] == number[i] && number[i] == number[i+1] {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
Reference in New Issue
Block a user