求Python/PostgreSQL脚本:检测16位以8开头字符串是否含6个及以上重复数字
检测16位以8开头数字串中是否存在任意6个及以上相同数字(Python/PostgreSQL实现)
问题背景
需要检测已验证的、长度固定16位且以8开头的数字字符串中,是否存在任意数字出现6次及以上(非仅限连续重复)。原代码仅能检测连续6位相同数字,无法满足需求。
Python 实现方案
使用collections.Counter统计每个数字的出现次数,直接判断是否有数字计数≥6:
from collections import Counter def has_excessive_duplicates(num_str): # 统计每个数字的出现次数 digit_counts = Counter(num_str) # 检查是否存在任意数字出现6次及以上 return any(count >= 6 for count in digit_counts.values()) # 测试示例 print(has_excessive_duplicates("811811113111711")) # 输出: True print(has_excessive_duplicates("822222222255555")) # 输出: True print(has_excessive_duplicates("812345678901234")) # 输出: False
说明
Counter会高效统计字符串中每个数字的出现频次any()函数遍历计数结果,只要有一个数字满足条件就返回True,无需遍历所有数字- 由于输入已验证(16位、以8开头、纯数字),无需额外做格式校验
PostgreSQL 实现方案
针对数据库中的字符串字段,可通过拆分字符、分组统计的方式检测:
单个字符串检测
SELECT EXISTS ( SELECT digit FROM unnest(string_to_array('811811113111711', NULL)) AS digit GROUP BY digit HAVING COUNT(digit) >= 6 ) AS has_excessive_duplicates;
批量检测表中数据
假设表名为your_table,目标字段为target_str:
SELECT target_str, EXISTS ( SELECT digit FROM unnest(string_to_array(target_str, NULL)) AS digit GROUP BY digit HAVING COUNT(digit) >= 6 ) AS has_excessive_duplicates FROM your_table;
说明
string_to_array(target_str, NULL)将字符串拆分为单个字符的数组unnest()将数组转换为行数据,方便分组统计EXISTS子查询判断是否存在出现≥6次的数字,返回布尔结果
内容的提问来源于stack exchange,提问作者user20965237
相关产品推荐
相关产品推荐

