C类,  持续更新,  算法,  计算机,  随想

如何正确的起ID

进入一个新系统的时候,第一件事就是取名字。ID分为两部分,uname和uid。uname是名字,可能是唯一的;uid一般是累加的数字,或者一串字母,一定是唯一的。那么,如何正确的取ID呢?

uname

拿域名举例。域名是要真金白银的去买的,我们可以看看价高的域名有什么特点。简单来说,长度越短、后缀越好(.com是最好的)、发音的音节越少(两个音节最佳)、和现实中的词语越相关的域名越贵。比如我这个网站:bestcoder.cn,言简意赅,就是顶尖研发,是个不可多得的好域名。

那么,什么样的词比较常见呢?这涉及到自然语言处理中的词频统计。你可以把所有的中文语料(或者某个行业的)做一个词频统计。然后就能得到词频的列表。高频词就是好ID。

词频统计伪代码
Function CountWordFrequency(input_text):
    # Step 1: Initialize an empty dictionary to store word counts
    word_count = {}

    # Step 2: Preprocess the input text
    input_text = input_text.lower()                 # Convert all text to lowercase
    input_text = RemovePunctuation(input_text)     # Remove punctuation

    # Step 3: Split the text into words
    word_list = SplitTextIntoWords(input_text)     # Split by spaces or delimiters

    # Step 4: Count word frequencies
    For each word in word_list:
        If word is not in word_count:
            word_count[word] = 1                   # Initialize count for new word
        Else:
            word_count[word] += 1                  # Increment count for existing word

    # Step 5: Return the word frequency dictionary
    Return word_count

如果为了吸引人的注意,还需要考虑排序规则。比如马云曾经说,阿里巴巴为什么是个好品牌。因为alibaba的首字母是A,字母序永远排在网页的第一份。就像你列表里的AAAAA建材王哥是一样的。

另一个就是对当下的热词蹭热度、蹭车、蹭流量。当然不火也可以蹭。我不知道大家有没有注意微博上多了一些人。他们顶着你好友的ID,然后后面加一个~或者_的后缀,然后骗人。我不了解他们,但是这一定是一种成熟的灰产。

uid

uid一般就是数字和字母。一般是10~12位,对应的就是十亿到千亿范围的数字。在随机数中,什么样的数字比较好呢?

根据本福特定律,以1为首位数字的数的出现概率约为总数的三成,接近直觉得出之期望1/9的3倍。推广来说,越大的数,以它为首几位的数出现的概率就越低。

所以,显而易见,越小的数字越好。因为越小的数字出现的概率越大,相当于高频。

在此基础上,连号的数字、整数(比如10000)、递增或者递减的数字(顺子)也是好的。因为比较好记。

除此之外,还有幸运数字。在中文中,8、6、9都是好数字,4和13都是不好的数字。

还有一些赋予了特别含义的数字,比如谐音,或者是在某些领域比较常见的参数,也是好的。比如365、1024、2048、1314都是好的数字。

我跑了一个幸运数字的脚本。根据我的计算,一亿以内的好数字,有92万个,也就是0.92%,即1%左右的数字是好数字。这是不是也暗示着99%的人都是普通的,只有1%的人能够脱颖而出呢?

点开查看代码
import re

def is_lucky(number):
    """
    判断一个数字是否是幸运数字。
    """
    num_str = str(number)
    num_len = len(num_str)

    # 连号 > 数字长度的 80%
    required_length = max(1, -(-num_len * 80 // 100))  # 取上限,超过 80% 条件
    if any(len(set(num_str[i:i+required_length])) == 1 for i in range(num_len - required_length + 1)):
        return True

    # 顺子必须 > 数字长度的 80%,且出现在数字的头部或尾部
    ascending_seq = "0123456789"[:required_length]
    descending_seq = "9876543210"[:required_length]
    if num_str[:required_length] in (ascending_seq, descending_seq) or num_str[-required_length:] in (ascending_seq, descending_seq):
        return True

    # 带有超过数字长度 80% 的 8、6、9
    if sum(1 for ch in num_str if ch in '869') >= required_length:
        return True

    # 包含特定幸运数字或吉利数字,并且幸运数字的占比必须超过数字长度的一半
    lucky_patterns = ["520", "1024", "2048", "1314", "888", "666", "999"]
    total_lucky_length = sum(len(pattern) * num_str.count(pattern) for pattern in lucky_patterns)
    if total_lucky_length > num_len // 2:
        return True

    # 整个数字必须是回文数字
    if num_str == num_str[::-1]:
        return True

    return False

def count_lucky_numbers(start, end, output_file):
    """
    计算范围内的幸运数字数量,并将其打印到文件。
    """
    lucky_count = 0
    with open(output_file, 'w') as file:
        for num in range(start, end):
            if is_lucky(num):
                lucky_count += 1
                file.write(f"{num}\n")

    return lucky_count

if __name__ == "__main__":
    start = 0
    end = 10**6
    output_file = "lucky_numbers.txt"
    # 为了避免长时间运行,可以分批运行,或先尝试较小范围,例如 0 到 10^6 100000
    print("幸运数字数量:", count_lucky_numbers(start, 10**9, output_file))

对于字母,同样也有字母频率。更多的是看英文单词的词频、特殊含义。

对于6位以内的字母组合(比如车牌号),我也计算了一下,单词的占比只占0.18%,也就是只有0.18%的组合才是单词,才是好ID。

点开查看代码
from math import factorial

# Function to calculate permutations (P(n, k))
def permutations(n, k):
    return factorial(n) // factorial(n - k)

# Function to calculate combinations (C(n, k))
def combinations(n, k):
    return factorial(n) // (factorial(k) * factorial(n - k))

# Number of letters in the alphabet
n = 26

# Calculate total permutations and combinations for 1 <= k <= 6
total_permutations = sum(permutations(n, k) for k in range(1, 7))
total_combinations = sum(combinations(n, k) for k in range(1, 7))

# Calculate ratio
ratio = total_combinations / total_permutations

total_permutations, total_combinations, ratio

另外就是英文的缩写。各行各业的缩写。

最后总结一下。ID是一种自然资源,有一些ID就是比别的好。但是现在的这个游戏——地球online上面的ID,已经被占用的差不多了。你可以回想一下,任何一种动物,是不是都有了对应的品牌?任何一个单词,都有对应的公司?甚至是你小学课本上看到的故事、听过的儿歌,都和商业绑定在了一起。

也就是说,利用ID和现实事物的映射,能够提升品牌的知名度。抢占ID,其实是抢占心智的一部分。ID是一种自然资源,但是已经被前人开采的差不多了。

最后,告诉大家一个秘密:注册账号不要钱。如果你觉得自己的账号ID不好,你可以再注册一个。只要你愿意,大可注册个几十个。更深层的秘密是,生孩子也不要钱,上户口、创建身份证号本身没有成本,只要你能找到女人愿意跟你生就行。但是我们大部分的人就像随机的ID一样。很不起眼,也没有太多幸运,不能在人群中脱颖而出。如果能再来一次,还是搞一个好的ID。

最后更新于 2025年1月6日 by qlili

0 0 votes
Article Rating
guest

0 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x