12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- // @Author gmy 2024/8/7 10:41:00
- package utils
- import (
- "fmt"
- "github.com/mozillazg/go-pinyin"
- "strings"
- "unicode"
- )
- // GenerateIndexCode 指标编码规则:粮油商务网拼音首字母+指标名称拼音首字母,数字、字母保留,特殊字符拿掉
- // 例:美湾:9月U:国际大豆进口成本价:期货收盘:张家港 -----> lyswwmw9yUgjddjkcbjqhspzjg
- func GenerateIndexCode(sourceName string, indexName string) string {
- // 获取汉字的拼音首字母,保留数字和大写字母
- firstLetters := getFirstLetters(indexName)
- // 组合 sourceName 和处理后的拼音首字母
- indexCode := fmt.Sprintf("%s%s", sourceName, firstLetters)
- return indexCode
- }
- // getFirstLetters 获取汉字的拼音首字母,并保留数字和大写字母
- func getFirstLetters(input string) string {
- // 设置拼音转换选项,只获取首字母
- args := pinyin.NewArgs()
- args.Style = pinyin.FirstLetter
- // 定义用于存储结果的字符串
- var result strings.Builder
- // 遍历输入字符串中的每个字符
- for _, r := range input {
- if unicode.IsDigit(r) || unicode.IsUpper(r) {
- // 保留数字和大写字母
- result.WriteRune(r)
- } else if unicode.Is(unicode.Han, r) {
- // 如果是汉字,则获取其拼音首字母
- py := pinyin.Pinyin(string(r), args)
- if len(py) > 0 && len(py[0]) > 0 {
- result.WriteString(py[0][0])
- }
- }
- // 对于其他字符,忽略处理
- }
- return result.String()
- }
- /*func GenerateIndexCode(sourceName string, indexName string) string {
- // 获取拼音首字母
- indexInitials := getFirstLetter(indexName)
- // 保留源名称中的字母和数字
- sourceNameFiltered := filterAlphanumeric(indexName)
- // 拼接源名称和首字母
- indexCode := sourceName + sourceNameFiltered + indexInitials
- // 保留字母和数字,去掉其他特殊字符
- re := regexp.MustCompile(`[^a-zA-Z0-9]`)
- indexCode = re.ReplaceAllString(indexCode, "")
- // 转换为小写
- indexCode = strings.ToLower(indexCode)
- return indexCode
- }
- // 获取字符串中的拼音首字母
- func getFirstLetter(s string) string {
- a := pinyin.NewArgs()
- p := pinyin.Pinyin(s, a)
- firstLetters := ""
- for _, syllables := range p {
- if len(syllables) > 0 {
- firstLetters += strings.ToUpper(syllables[0][:1])
- }
- }
- return firstLetters
- }
- // 过滤只保留字母和数字
- func filterAlphanumeric(s string) string {
- re := regexp.MustCompile(`[^a-zA-Z0-9]`)
- return re.ReplaceAllString(s, "")
- }*/
|