mysql手机号11_我用不小心用 mysql 的int(11) 存了 手机号,数据都有问题,有办法恢复么?...

对不起LZ了,这个答案正像Sunyanzi指出的,MySQL不是把高位字节吃掉而是转成了Int的最大值。

考虑到原先提交的答案还是花了点心思写的,就还留在这里了,也许对其他高位字节溢出的问题有所帮助。

这个有点意思,问题出在int只有4个字节,而手机号码是11位的十进制值由5个字节组成,所以转成int后最高位的第5个字节被“吃掉了”,然后就杯具了。

解决思路:

把丢失的那个字节找回来。

按照当前手机号码范围130 0000 0000到189 9999 9999经分析,丢失的高位字节可能是0x03或者0x04。

因此加上0x03或者0x04恢复后的值(Long长整型)符合手机号码范围/格式,就可以得到原始值了。

遗留问题: 有可能出现加0x03和0x04都符合手机号码范围/格式的情况,取加0x04的结果(没法子的事情)

好了,上代码(Java)代码:

/**

* 按照当前手机号码范围130 0000 0000到189 9999 9999经分析,丢失的高位字节可能是0x03或者0x04。

* 因此加上0x03或者0x04恢复后的值(Long长整型)符合手机号码范围/格式,就可以得到原始值了。

* 有可能出现加0x03和0x04都符合手机号码范围/格式的情况,取加0x04的结果(没法子的事情)

*

* @param original 溢出前的原始11位手机号码

* @return 转int之后,再重新恢复得到的11位手机号码

*/

public static long recover(long original) {

Pattern p = Pattern.compile("1[3,4,5,8]\\d{9}");

// 更精确的手机号段,但可能不是最新的,这里先不使用。参考: http://wenku.baidu.com/view/9d088df30242a8956bece435.html

// Pattern.compile("(133|153|180|181|189|134|135|136|137|138|139|150|151|152|157|158|159|182|183|187|188|130|131|132|155|156|185|186|145|147)\\d{8}");

int errorInt = (int) original;

System.out.println("溢出前的long值:" + original);

System.out.println("溢出后的int值:" + errorInt);

System.out.println("溢出前的16进制值:" + Long.toHexString(original));

String hexA = "000000000000" + Long.toHexString(errorInt);

hexA = hexA.substring(hexA.length() - 8);

System.out.println("溢出后的16进制值(左补0):" + Long.toHexString(errorInt));

String hex1 = "4" + hexA;

System.out.println("补全后的16进制值1:" + hex1);

BigInteger bi1 = new BigInteger(hex1, 16);

long rt1 = bi1.longValue();

System.out.println("补全后的Long值:" + rt1);

String hex2 = "3" + hexA;

System.out.println("补全后的16进制值2:" + hex2);

BigInteger bi2 = new BigInteger(hex2, 16);

long rt2 = bi2.longValue();

System.out.println("补全后的Long值2:" + rt2);

final boolean m1 = p.matcher(String.valueOf(rt1)).matches();

final boolean m2 = p.matcher(String.valueOf(rt2)).matches();

long rt = 0;

if (m1 && m2) {

// 加3加4都符合手机号码格式

System.err.println("加3加4都符合手机号码格式的溢出后int值:" + errorInt + ". 2个可能的恢复值为: " + rt1 + ", " + rt2);

//有可能出现加0x03和0x04都符合手机号码范围/格式的情况,取加0x04的结果(没法子的事情)

rt = rt1;

} else {

if (m1) {

rt = rt1;

}

if (m2) {

rt = rt2;

}

}

System.out.println("恢复后的符合手机号码格式的值:" + rt + "\n\n");

return rt;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575062.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中Collections、Map集合、HashMap集合、LinkedHashMap集合、Hashtable集合、List/Map/Set接口静态方法of

Collections:集合工具类: Collections是一个集合的工具类,通过此类可以调用操作集合的api,但是只能操作list结合,不能操作set集合,如下: Person类:用于集合存储自定义元素时创建自定义对象&am…

动态定义数组

首先:为什么需要动态定义数组呢? 这是因为,很多情况下,在预编译过程阶段,数组的长度是不能预先知道的,必须在程序运行时动态的给出 但是问题是,c要求定义数组时,必须明确给定数组的…

sql随机抽取数据50条_厉害!苏宁通过citus打造分布式数据库抗住DB高负载

2018-07-16 23:59内容来源:2017 年 10 月 20 日,苏宁云商IT总部资深技术经理陈华军在“PostgreSQL 2017中国技术大会”进行《苏宁citus分布式数据库应用实践》演讲分享。IT 大咖说(微信id:itdakashuo)作为独家视频合作…

mysql四种事务级别_【MySQL 知识】四种事务隔离级别

摘要:本篇文章主要是为了对MySQL的四种事务隔离级别的介绍。为了保证数据库的正确性与一致性,数据库事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。事务的四种隔离级别根据隔离级别由低到高分别为读未提交(R…

java中Debug调试、异常的概念、异常体系、处理异常的关键字try/catch/finally/throw/throws、多个异常使用捕获并处理的方式、继承关系中处理异常、自定义异常类

Debug调试: bug指程序当中遇到的一些错误异常,Debug指调试bug,找到bug对其解决;debug可以让代码逐行执行,查看代码执行的过程,调试程序中出现的bug或异常。 public class DebugClass {public static void main(Strin…

densenet网络结构_FC-DENSENET用于图像分割学习笔记

近日使用FC Dense Net 做分割,记录学习使用过程。FC-DenseNet 原文链接:https://arxiv.org/abs/1611.09326 《The One Hundred Layers Tiramisu: Fully Convolutional DenseNets for Semantic Segmentation》初次使用此网络,第一眼是被这个名…

mongodb mysql资源占用_如何限制mongodb启动时占用过多内存

默认情况下,mongodb占用的内存大小为:Starting in 3.4, the WiredTiger internal cache, by default, will use the larger of either:50% of RAM minus 1 GB, or256 MB.下面我们来看一下限制mongodb启动时占用内存的方法:新增配置文件 /etc/…

手机网站判断及跳转

现在智能手机上网越来越普遍了,为了获得用户体验增加网站流量,你有必要为你的网站增加一个访问端设备的判断功能,若发现是手机用户访问,则直接跳转到手机站,通过百度的APP site,很容易就可实现这功能。只需…

js ...运算符_「 giao-js 」用js写一个js解释器

前言在这篇文章中,我们将通过 JS 构建我们自己的 JS 解释器,用 JS 写 JS,这听起来很奇怪,尽管如此,这样做我们将更熟悉 JS,也可以学习 JS 引擎是如何工作的!什么是解释器 (Interpreter) ?解释器是在运行时运行的语言求值器,它动态地执行程序的源代码。 解释器解析源代码,从源代…

地区json文件_【小例子】使用jQuery实现省市区三级联动显示,附源码json文件

开发工具-intellij IDEA需求1.实现对json文件的读取。2.可以在省级选择所有省名和直辖市名3.选择一级省名后自动刷新市名4.选择二级市名后自动刷新区名逻辑分析第一步:读取json文件第二步:遍历出所有一级的省名第三步:把遍历出来的省名动态追…

qt 状态栏

有段时间没有写过博客了。假期去上海旅游,所以一直没有能够上网。现在又来到这里,开始新的篇章吧!今天的内容主要还是继续完善前面的那个程序。我们要为我们的程序加上一个状态栏。状态栏位于主窗口的最下方,提供一个显示工具提示…

动态获取textarea后面的p标签_HTML简单标签连起实现的小玩意:

《今天不发知识点,刚被误封了,所有没有太多时间去给整理哈,请谅解》(谢谢欣赏)前面发了那么多HTML标签,今天来玩个小视频,小白也能几分钟就会的,代码没有写好,时间急了点…

elipse+pydev+python开发arcgis脚本程序

环境配置参考:http://www.cnblogs.com/halfacre/archive/2012/07/22/2603848.html 添加arcpy类库、arctoolbox、arcgis-bin如下所示。 windos——preference——pydev 完成环境配置。 二、获取文件路径Python方法 os.getcwd()返回的是当前文件的目录。假如我的代码…

python py2exe_转:py2exe 生成 python 可执行文件

#mysetup.py from distutils.core import setup import py2exe setup(console["helloworld.py"]) 然后按下面的方法运行mysetup.py: python mysetup.py py2exe 上面的命令执行后将产生一个名为dist的子目录,其中包含了helloworld.exe,python24.dll,librar…

BZOJ3427 Poi2013 Bytecomputer

可以YY一下嘛 最后一定是-1, -1, ..., -1, 0, 0, ... 0, 1, 1, ..., 1的一个数列 于是f[i][j]表示到了第i个数,新数列的第j项为-1 or 0 or 1的的最小代价 然后就没有然后了 1 /**************************************************************2 Problem: 3427…

mysql timdir_MYSQL学习笔记——数据类型

mysql的数据类型可以分为三大类,分别是数值数据类型、字符串数据类型以及日期时间数据类型。数值数据类型数值类型又可以分为整型、浮点类型、Decimal。整型mysql的整型可以分为TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,下表给出了每个类型的存储空间…

python编写网页游戏脚本_[大数据]用Python脚本做一些网页游戏中力所能及的自动化任务 - 码姐姐找文...

下面是一段自动登录360传奇霸业游戏的脚本: from pymouse importPyMouseimporttimeimportwebbrowserfrom pykeyboard importPyKeyboard url "http://cqby.wan.360.cn/game_login.php?server_idS577&&srcloginhistory"webbrowser.open_new_tab(ur…

mysql 子查询模糊匹配_sql中的查询(模糊查询,子查询,联表查询)

1、查出每个部门不等于经理的工资select from emp where sal <>all(select min (sal) from emp where jobmanager group by deptno)2select * from emp where sal3select * from emp where sal>all(select min(sal) from emp where jobmanager group by deptno);联表查…

Oracle碎碎念~2

1. 如何查看表的列名及类型 SQL> select column_name,data_type,data_length from all_tab_columns where ownerSCOTT and table_nameEMP;COLUMN_NAME DATA_TYPE DATA_LENGTH --------------- ---------- ----------- EMPNO NUMBER 22 ENAME …

flutter怎么添加ios网络权限_使用Flutter控制蓝牙通讯

背景知识视频教程Dart和Flutter&#xff1a;完整的开发人员指南 - 国外课栈​viadean.comFlutter使用Firestore构建复杂的Android和ios应用 - 国外课栈​viadean.comFlutter的实际项目 - 国外课栈​viadean.com您想使用蓝牙玩物联网设备&#xff0c;但不能在其中放置任何软件吗…