左晓为主开发手持机充值管理机
zuoxiao
2024-03-15 c238bf89a89eec5030539c12d9902dbbd8ce3851
app/src/main/java/com/dayu/recharge/activity/NewCardActivity.java
@@ -1,18 +1,17 @@
package com.dayu.recharge.activity;
import android.Manifest;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.text.InputFilter;
import android.text.Spanned;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import com.dayu.recharge.utils.DeviceNumberUtils;
import com.dayu.recharge.view.ProgressDialog;
import com.msd.ocr.idcard.LibraryInitOCR;
import androidx.annotation.NonNull;
import com.dayu.recharge.MyApplication;
import com.dayu.recharge.card.UserCard;
import com.dayu.recharge.databinding.ActivityNewCardBinding;
@@ -28,14 +27,21 @@
import com.dayu.recharge.tools.HexUtil;
import com.dayu.recharge.tools.Utils;
import com.dayu.recharge.utils.CRC8;
import com.dayu.recharge.utils.DeviceNumberUtils;
import com.dayu.recharge.utils.SocketUtil;
import com.dayu.recharge.utils.TipUtil;
import com.permissionx.guolindev.PermissionX;
import com.dayu.recharge.view.ProgressDialog;
import com.hjq.permissions.OnPermissionCallback;
import com.hjq.permissions.Permission;
import com.hjq.permissions.XXPermissions;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * Copyright (C), 2023,
@@ -73,74 +79,120 @@
            @Override
            public void onClick(View v) {
                rxPermission();
                getPermission();
            }
        });
        newCardBinding.newCardRegistBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
        newCardBinding.newCardRegistBtn.setOnClickListener(v -> {
                String userName = newCardBinding.newCardName.getText().toString();
                long date = System.currentTimeMillis();
                String phone = newCardBinding.newCardPhone.getText().toString();
                String userID = newCardBinding.newCardId.getText().toString().toUpperCase();
            String userName = newCardBinding.newCardName.getText().toString();
            long date = System.currentTimeMillis();
            String phone = newCardBinding.newCardPhone.getText().toString();
            String userID = newCardBinding.newCardId.getText().toString().toUpperCase();
                if (!TextUtils.isEmpty(userName)
                        && !TextUtils.isEmpty(phone) && !TextUtils.isEmpty(userID)
                ) {
                    if (userName.length() <= 1 || !validateName(userName)) {
                        TipUtil.show(NewCardActivity.this, "请输入正确姓名");
                        return;
                    } else if (phone.length() < 11) {
                        TipUtil.show(NewCardActivity.this, "请输入正确手机号");
                        return;
                    } else if (!Utils.check(userID)) {
                        TipUtil.show(NewCardActivity.this, "请输入正确身份证号");
                        return;
                    } else {
                        userCardBean = new UserCardBean();
                        userCardBean.setUserName(userName);
                        userCardBean.setDate(date);
                        userCardBean.setSerial(adminData.getSerial());
                        userCardBean.setPhone(phone);
                        userCardBean.setUserID(userID);
                        initCard();
                    }
            if (!TextUtils.isEmpty(userName)
                    && !TextUtils.isEmpty(phone) && !TextUtils.isEmpty(userID)
            ) {
                if (userName.length() <= 1 || !validateName(userName)) {
                    TipUtil.show(NewCardActivity.this, "请输入正确姓名");
                    return;
                } else if (phone.length() < 11 || !isValidPhoneNumber(phone)) {
                    TipUtil.show(NewCardActivity.this, "请输入正确手机号");
                    return;
                } else if (!Utils.check(userID)) {
                    TipUtil.show(NewCardActivity.this, "请输入正确身份证号");
                    return;
                } else {
                    TipUtil.show(NewCardActivity.this, "请输入完整内容");
                    userCardBean = new UserCardBean();
                    userCardBean.setUserName(userName);
                    userCardBean.setDate(date);
                    userCardBean.setSerial(adminData.getSerial());
                    userCardBean.setPhone(phone);
                    userCardBean.setUserID(userID);
                    initCard();
                }
            } else {
                TipUtil.show(NewCardActivity.this, "请输入完整内容");
            }
        });
    }
    private boolean isValidPhoneNumber(String phoneNumber) {
        // 定义手机号的正则表达式,确保数字部分没有连续6位相同的数字
        String phoneRegex = "^1[0-9]{10}$";
        // 创建 Pattern 对象
        Pattern pattern = Pattern.compile(phoneRegex);
        // 创建 matcher 对象
        Matcher matcher = pattern.matcher(phoneNumber);
        // 判断手机号是否匹配正则表达式
        return matcher.matches() && !hasSixConsecutiveSameDigits(phoneNumber);
    }
    /**
     * 判断是否有6个相同的连续数字
     *
     * @param input
     * @return
     */
    public static boolean hasSixConsecutiveSameDigits(String input) {
        char[] digits = input.toCharArray();
        for (int i = 0; i <= digits.length - 6; i++) {
            boolean consecutiveSame = true;
            for (int j = 1; j < 6; j++) {
                if (digits[i + j] != digits[i + j - 1]) {
                    consecutiveSame = false;
                    break;
                }
            }
        });
    }
    private void rxPermission() {
        PermissionX.init(NewCardActivity.this).permissions(Manifest.permission.CAMERA)
                .onExplainRequestReason((scope, deniedList) -> {
// val message = "PermissionX需要您同意以下权限才能正常使用"
                })
                .request((allGranted, grantedList, deniedList) -> {
                    if (allGranted) {//所有申请的权限都已通过
                        startCamera();
                    } else {//您拒绝了如下权限:$deniedList
                    }
                });
            if (consecutiveSame) {
                return true;
            }
        }
        return false;
    }
    private void startCamera() {
    private void getPermission() {
        try {
            XXPermissions.with(this)
                    // 申请单个权限
//                    .permission(Permission.RECORD_AUDIO)
                    // 申请多个权限
                    .permission(Permission.CAMERA)
                    // 设置权限请求拦截器(局部设置)
                    //.interceptor(new PermissionInterceptor())
                    // 设置不触发错误检测机制(局部设置)
                    //.unchecked()
                    .request(new OnPermissionCallback() {
        Bundle bundle = new Bundle();
        bundle.putBoolean("saveImage", false);
        bundle.putInt("requestCode", SCAN_IDCARD_REQUEST);
        bundle.putInt("type", 0); //0身份证, 1驾驶证
        LibraryInitOCR.startScan(NewCardActivity.this, bundle);
                        @Override
                        public void onGranted(@NonNull List<String> permissions, boolean allGranted) {
                            if (allGranted) {
                            }
                        }
                        @Override
                        public void onDenied(@NonNull List<String> permissions, boolean doNotAskAgain) {
                            if (doNotAskAgain) {
                                // 如果是被永久拒绝就跳转到应用权限系统设置页面
                            } else {
//                                toast("获取录音和日历权限失败");
                            }
                        }
                    });
        } catch (
                Throwable e) {
            e.printStackTrace();
        }
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
@@ -227,9 +279,10 @@
                if (CRC8.isCRC8(readData.getOriginDataBytes())) {
                    String state = BcdUtil.bcdToStr(readData.getBodyBytes()[26]); //BCD码00成功01身份证已注册02其他原因失败
                    Log.i("initCard", "state:" + state);
                    if (state.equalsIgnoreCase("00")) {
                        String initPeasantCode = HexUtil.bytesToHex(Arrays.copyOfRange(readData.getBodyBytes(), 10, 26));
                        String initPeasantCode = HexUtil.bytesToHex(Arrays.copyOfRange(readData.getBodyBytes(), 10, 26));
                        String serial = baseDao.adminDao().findFirst().getSerial();
                        UserCard userCard = new UserCard();
                        userCard.setRechargeTimes(0);
@@ -319,7 +372,13 @@
            // 汉字的Unicode范围是:0x4e00 - 0x9fa5
            return (c >= 0x4e00 && c <= 0x9fa5);
        }
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        newCardActivity = null;
    }
}