使用 Java Swing 的 IMEI 验证器

news2025/4/8 9:58:59

一.介绍

本文档介绍如何使用 Java Swing 创建一个简单的 IMEI 验证器应用程序。

二.什么是 IMEI 号码

IMEI 代表国际移动设备识别码。IMEI 用于在移动设备连接到网络时对其进行识别。每个 GSM、CDMA 或卫星移动设备都有唯一的 IMEI 号码。此号码将印在设备电池组件内。用户可以通过拨打“*#06#”来查找其设备的 IMEI 号码。IMEI 是一个 15 位数字,最后一位数字称为“校验位”,可以使用 Luhn 算法进行识别。

三.Luhn 算法

Luhn 算法又称为“Modulus 10”算法。这是一种简单的校验和公式,用于验证各种识别码,例如信用卡号、IMEI 号、美国国家提供商识别码和加拿大 社会保险号。它由IBM科学家Hans Peter Luhn创建。验证是通过验证校验位来完成的。

  1. 将最右边每个第二位数字的值加倍(第一个右边的数字作为校验位)。
  2. 将步骤 (1) 中的乘积和原始数字中未受影响的数字相加。
  3. 如果总数模 10 等于 0,则该数字有效,否则无效。

一个简单的例子:手机的 IMEI 号-354557030810924

步骤1

第2步

3+1+0+4+1+0+5+1+4+0+6+0+1+6+1+0+9+4+4=50

步骤3

50%10=0。因此上述数字是有效数字。

四.使用 Java Swing 的 IMEI 验证器

  1. 打开 Eclipse 并创建新的 Java 项目。


2. 将项目命名为 ImeiValidator 并单击“完成”。


3.现在打开包资源管理器并右键单击 ImeiValidator。


4. 创建一个名为 Imeivalidator 的新类:

  1. 在类中写入如下代码:
import javax.swing.*;  
import java.awt.BorderLayout;  
import java.awt.event.*;  
public class Imei {  
    JFrame frame;  
    JButton button;  
    JTextField field;  
    JLabel label;  
    JLabel warninglabel;  
    Box panel;  
    public static void main(String[] args) {  
        Imei hl = new Imei();  
        hl.gui();  
    }  
    public void gui() {  
        panel = Box.createVerticalBox();  
        frame = new JFrame();  
        button = new JButton("Click");  
        field = new JTextField(15);  
        field.putClientProperty("JComponent.sizeVariant", "mini");  
        label = new JLabel("Enter the IMEI Number");  
        warninglabel = new JLabel("");  
        //adding contents to frame  
        panel.add(label);  
        panel.add(field);  
        panel.add(warninglabel);  
        panel.add(button);  
        frame.getContentPane().add(BorderLayout.NORTH, panel);  
        frame.setVisible(true);  
        frame.setSize(300, 300);  
        button.addActionListener(new buttonAction());  
    }  
    public class buttonAction implements ActionListener {  
        public void actionPerformed(ActionEvent ev) {  
            int sum = 0;  
            String ImeiNo = field.getText();  
            if (ImeiNo.length() != 15) {  
                warninglabel.setText("IMEI Number should contain 15 characters");  
            } else  
            {  
                boolean errorflag = false;  
                for (int i = 0; i <= 14; i++) {  
                    //getting ascii value for each character  
                    char c = ImeiNo.charAt(i);  
                    int number = c;  
                    //Assigning number values to corrsponding Ascii value  
                    if (number < 48 || number > 57) {  
                        warninglabel.setText("Enter only numerals");  
                        errorflag = true;  
                        break;  
                    } else  
                    {  
                        switch (number) {  
                            case 48:  
                                number = 0;  
                                break;  
                            case 49:  
                                number = 1;  
                                break;  
                            case 50:  
                                number = 2;  
                                break;  
                            case 51:  
                                number = 3;  
                                break;  
                            case 52:  
                                number = 4;  
                                break;  
                            case 53:  
                                number = 5;  
                                break;  
                            case 54:  
                                number = 6;  
                                break;  
                            case 55:  
                                number = 7;  
                                break;  
                            case 56:  
                                number = 8;  
                                break;  
                            case 57:  
                                number = 9;  
                                break;  
                        }  
                        //Double the even number and divide it by 10. add quotient and remainder  
                        if ((i + 1) % 2 == 0) {  
                            number = number * 2;  
                            number = number / 10 + number % 10;  
                        }  
                        sum = sum + number;  
                    }  
                }  
                // Check the error flag to avoid overWriting of Warning Lable  
                if (!errorflag) {  
                    if (sum % 10 == 0) {  
                        warninglabel.setText("Valid");  
                    } else  
                    {  
                        warninglabel.setText("Invalid");  
                    }  
                }  
            }  
        }  
    }  
}    

  1. 现在使用运行 -> 以…方式运行 -> Java 应用程序来运行该应用程序。

  1. 将显示以下窗口:

  1. 输入IMEI号码,点击“点击”,如下图:

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

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

相关文章

Flutter GPU 是什么?为什么它对 Flutter 有跨时代的意义?

Flutter 3.24 版本引入了 Flutter GPU 概念的新底层图形 API flutter_gpu &#xff0c;还有 flutter_scene 的 3D 渲染支持库&#xff0c;它们目前都是预览阶段&#xff0c;只能在 main channel 上体验&#xff0c;并且依赖 Impeller 的实现。 Flutter GPU 是 Flutter 内置的底…

Python3 第六十六课 -- CGI编程

目录 一. 什么是 CGI 二. 网页浏览 三. CGI 架构图 四. Web服务器支持及配置 五. 第一个CGI程序 5.1. HTTP 头部 5.2. CGI 环境变量 六. GET和POST方法 6.1. 使用GET方法传输数据 6.1.1. 简单的url实例&#xff1a;GET方法 6.1.2. 简单的表单实例&#xff1a;GET方法…

暑期数据结构 空间复杂度

3&#xff0e;空间复杂度 空间复杂度也是一个数学表达式&#xff0c;是对一个算法在运行过程中临时占用存储空间大小的量度。 空间复杂度不是程序占用了多少bytes的空间&#xff0c;因为这个也没太大意义&#xff0c;所以空间复杂度算的是变量的个数。空间复杂度计算规则基本跟…

SAM2:在图像和视频中分割任何内容

SAM 2: Segment Anything in Images and Videos 一、关键信息 1. SAM 2概述&#xff1a; SAM 2 是一种基础模型&#xff0c;设计用于在图像和视频中实现可提示的视觉分割。该模型采用变压器架构和流式内存进行实时视频处理。它在原始的Segment Anything Model&#xff08;SAM…

自用 K8S 资源对象清单 YAML 配置模板手册-1

Linux 常用资源对象清单配置速查手册-1 文章目录 1、Pod 容器集合2、Pod 的存储卷3、Pod 的容器探针4、ResourceQuota 全局资源配额管理5、PriorityClass 优先级类 管理多个资源对象清单文件常用方法&#xff1a; 使用 sed 流式编辑器批量修改脚本键值进行资源清单的创建&am…

【高中数学/函数/值域】求f(x)=(x^2+1)^0.5/(x-1) 的值域

【问题】 求f(x)(x^21)^0.5/(x-1) 的值域 【来源】 《高中数学解题思维策略》P3 例1-1 杨林军著 天津出版传媒集团出版 【解答】 表达式说明f(x)(x^21)^0.5/(x-1)f(x)((x^21)/(x-1)^2)^0.5准备采用配方法f(x)(12/(x-1)2/(x-1)^2)^0.5(1)式f(x)(2*(1/(x-1)1/2)^21/2)^0.5(2)…

Pytorch系列-张量的类型转换

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 张量转换为NumPy数组 使用Tensor.numpy()函数可以将张量转换为ndarray数组 # 1.将张量转换为numpy数组 data_tensortorch.tensor([2,3,4]) # 使用张量对象中的numpy函数进行转…

LiveNVR监控流媒体Onvif/RTSP常见问题-页面上传SSL证书配置开启 HTTPS 服务?什么时候必须要开启HTTPS服务?

LiveNVR常见问题-页面上传SSL证书配置开启 HTTPS 服务&#xff1f;什么时候必须要开启HTTPS服务&#xff1f; 1、配置开启HTTPS1.1、准备https证书1.2、配置HTTPS端口1.3、配置证书路径1.3、 页面上传SSL证书 2、验证HTTPS服务3、为什么要开启HTTPS4、RTSP/HLS/FLV/RTMP拉流Onv…

Vue3+TS+element plus实现一个简单列表页面

期望完成效果 1.创建一个api api内容&#xff1a; 根据接口&#xff1a; 修改 url 和 函数的参数 以及 params里的内容 import { request } from "/utils/service" /** 查 */ export function getDyLogDataApi(page: any, limit: any, campaign_id: any, adgroup_id…

使用Packer构建镜像

什么是Packer Packer 是一个强大的工具&#xff0c;它可以帮助我们轻松地构建各种类型的镜像&#xff0c;如虚拟机镜像、Docker 镜像等。 Packer 的工作原理是通过定义一个配置文件&#xff0c;该文件描述了要构建的镜像的特征和要求。然后 Packer 使用这个配置文件来执行一系…

思迈特软件与海量数据库、红莲花安全浏览器完成兼容互认证

近期&#xff0c;思迈特软件信创认证喜讯传来&#xff0c;思迈特商业智能与数据分析软件[简称&#xff1a;Smartbi Insight] V11在数据库、浏览器产品兼容互认取得新突破&#xff0c;Smartbi Insight V11分别同海量数据库G100管理系统[简称&#xff1a;Vastbase G100] V2.2、红…

Java中的线性搜索

一.介绍 在本文中&#xff0c;我们将讨论或描述 Java 线性搜索。这是最简单的搜索方法。在此方法中&#xff0c;在列表中按顺序搜索要搜索的元素。此方法可应用于已排序或未排序的列表。 二.线性搜索&#xff08;顺序搜索&#xff09; 列表/数组的顺序搜索从列表/数组的开头…

Coco-LIC基于ubuntu的vscode进行断点调试

1、下vscode和插件 参考这个也行 https://zhuanlan.zhihu.com/p/704522656 2、编译debug版本并修改json 要在 Visual Studio Code (VSCode) 中进行断点调试 ROS 任务&#xff0c;你需要进行以下几个步骤&#xff1a; ### 1. 安装所需插件 - **C/C 插件**: 提供对 C 代码的调试…

day13-测试自动化之Selenium的元素定位

一、如何进行元素定位 1.1.元素定位作用 让程序操作指定元素&#xff0c;就必须先找到此元素 1.2.html页面组成格式 1.3.元素定位的概念 元素定位就是通过元素的信息或元素层级结构来定位元素的。 二、浏览器开发者工具 2.1.作用 快速定位元素&#xff0c;查看元素信息 2.2.谷…

《Advanced RAG》-06-探索RAG技术 Query Rewriting

摘要 详细阐述了多种查询重写技术&#xff0c;这些技术用于在检索增强生成&#xff08;RAG&#xff09;中优化查询和文档之间的语义匹配。 首先&#xff0c;介绍了假设文档嵌入&#xff08;HyDE&#xff09;方法&#xff0c;它通过生成假设文档并将其与原始查询结合&#xff0c…

卡码网KamaCoder 104. 建造最大岛屿

题目来源&#xff1a;104. 建造最大岛屿 C题解&#xff1a;先用深度优化算法计算每个孤岛的面积&#xff0c;然后给每个孤岛编号&#xff08;如果孤岛是U型的&#xff0c;防止面积加重复了&#xff09;&#xff0c;再去遍历每个海水区域&#xff0c;计算最大面积。 #include &…

jenkins+gitlab实现微服务的差异化部署

前景&#xff1a; Jenkins 和 GitLab 结合实现微服务的差异化部署具有多方面的意义和优势&#xff0c;主要包括以下几点&#xff1a; 自动化和持续集成&#xff1a;通过 Jenkins 可以实现从代码提交到部署的全自动化流程。这种自动化确保了每次代码变更都能够快速、可靠地构建…

【Python】数据类型之集合

集合是一个无序、可变、不允许元素重复的容器。 1、定义 v1{11,22,33} 1&#xff09;&#xff09;无序&#xff1a;集合无法通过索引取值。 2&#xff09;&#xff09;可变&#xff1a;可以添加和删除集合中的元素。 3&#xff09;&#xff09;集合不允许元素重复。 例如…

GD32 MCU碰到IIC总线卡死怎么办?

大家在使用MCU IIC通信时&#xff0c;若碰到设备复位或者总线干扰等情况&#xff0c;可能会导致IIC总线卡死&#xff0c;表现上总线上SDA或者SCL其中一根线为低电平&#xff0c;IIC总线一直处于busy状态。此时若代码上一直等待总线空闲&#xff0c;则可能导致软件死机&#xff…

PCL Chaikin曲线逼近型细分算法

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 Chaikin 逼近型细分算法是一种生成平滑曲线的方法,常用于计算机图形学和曲线建模。它基于 Paul Chaikin 于 1974 年提出的算法,通过迭代地插入新的控制点并移动原始控制点来细分曲线,从而逐渐逼近光滑曲线。具体…