android 百度绑定身份证

一、在百度AI官网下载文字识别的SDK

步骤一、	权限
 	<uses-permission android:name="android.permission.INTERNET" />
 	<uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  1. 下载完解压到根目录,打开libs会有一个ocr-sdk.jar还有4个文件夹
    在这里插入图片描述

  2. 把ocr-sdk.jar和四个文件夹放进项目的libs文件里
    在这里插入图片描述

  3. 导入Model,把我下面指定的ocr_ui导入到项目里,OCRDemo是一个demo可以进行参考,至于怎么导入ocr_ui往下看我给大家截图看一下
    在这里插入图片描述

  4. 在main下建一个新文件夹assets把下载的aip.license放进去
    在这里插入图片描述

  5. **这是导入ocr_ui的直接方式,还有其他方式导入你们也可以用你们自己的方式,不会导入的可以用我的方式进行导入 **
    在这里插入图片描述
    在这里插入图片描述

  6. 目前已经配置第三方的已经配置完了,最后再给大家一个依赖复制到自己的项目里,我的项目是weidujiangkang
    在这里插入图片描述
    这个依赖就是跟咱们导入的ocr_ui进行关联的 下面jniLibs和EventBus存入build.gradle的android里

	//jniLibs
	sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
	//EventBus
	 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
  	 }

下面的依赖加入build.gradle的dependencies里

	//EventBus 依赖
    implementation 'org.greenrobot:eventbus:3.1.1'
	//百度识别依赖
    compile 'com.android.support:appcompat-v7:25.1.1'
    compile files('libs/ocr-sdk.jar')
    compile project(path: ':ocr_ui')

在这里插入图片描述

  1. 混淆的依赖
-keep class com.baidu.ocr.sdk.**{*;}
-dontwarn com.baidu.ocr.**

在这里插入图片描述

XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#fff"
    android:orientation="vertical"
    tools:context=".shezhi.RealnameActivity">

    <LinearLayout
        android:id="@+id/qq"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#fff"
        android:orientation="horizontal"
        >
        <ImageView
            android:layout_width="16dp"
            android:layout_height="16dp"
            android:layout_gravity="center"
            android:id="@+id/xin_fan"
            android:layout_margin="20dp"
            android:src="@mipmap/common_icon_back_black_n"
            >
        </ImageView>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="实名认证"
            android:layout_marginRight="50dp"
            android:textSize="20sp"
            android:gravity="center"
            >
        </TextView>

    </LinearLayout>

    <TextView
        android:id="@+id/ww"
        android:layout_below="@+id/qq"
        android:layout_width="match_parent"
        android:layout_height="7dp"
        android:background="#F2ECEC"
        >
    </TextView>

    <ImageView
        android:layout_below="@+id/ww"
        android:id="@+id/ee"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:layout_marginTop="30dp"
        android:src="@mipmap/zheng"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        >
    </ImageView>

    <ImageView
        android:id="@+id/shi_xiang"
        android:layout_below="@+id/ww"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:src="@mipmap/ji"
        android:layout_marginTop="65dp"
        android:layout_centerHorizontal="true"
        >
    </ImageView>

    <TextView
        android:id="@+id/shi_xiang2"
        android:layout_below="@+id/shi_xiang"
        android:layout_width="wrap_content"
        android:layout_marginTop="15dp"
        android:layout_centerHorizontal="true"
        android:layout_height="wrap_content"
        android:text="点击拍摄/上传人面像"
        android:textStyle="bold"
        android:textColor="#0091EA"
        >
    </TextView>



    <ImageView
        android:id="@+id/rr"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:layout_below="@+id/ee"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginTop="20dp"
        android:src="@mipmap/fanmian"
        >
    </ImageView>


    <ImageView
        android:id="@+id/tt"
        android:layout_below="@+id/ee"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:src="@mipmap/ji"
        android:layout_marginTop="60dp"
        android:layout_centerHorizontal="true"
        >
    </ImageView>

    <TextView
        android:id="@+id/tt2"
        android:layout_below="@+id/tt"
        android:layout_width="wrap_content"
        android:layout_marginTop="15dp"
        android:layout_centerHorizontal="true"
        android:layout_height="wrap_content"
        android:text="点击拍摄/上传国徽面"
        android:textStyle="bold"
        android:textColor="#0091EA"
        >
    </TextView>

    <TextView
        android:id="@+id/xiayibu"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/rr"
        android:text="完成"
        android:gravity="center"
        android:padding="10dp"
        android:background="@drawable/xiu_mima"
        android:textColor="#fff"
        android:layout_margin="30dp"
        >
    </TextView>

</RelativeLayout>

在这里我给大家看一下 我的这个布局效果

在这里插入图片描述

MainActivity类

	@BindView(R.id.xin_fan)
    ImageView xinFan;
    @BindView(R.id.qq)
    LinearLayout qq;
    @BindView(R.id.ww)
    TextView ww;
    @BindView(R.id.ee)
    ImageView ee;
    @BindView(R.id.shi_xiang)
    ImageView shiXiang;
    @BindView(R.id.rr)
    ImageView rr;
    @BindView(R.id.tt)
    ImageView tt;
    @BindView(R.id.xiayibu)
    TextView xiayibu;
    @BindView(R.id.shi_xiang2)
    TextView shiXiang2;
    @BindView(R.id.tt2)
    TextView tt2;
	private static final int REQUEST_CODE_CAMERA = 102;
	private String filePath;       //获取到的照片
    private boolean a = true;       //正面照片
    private boolean b = true;       //反面照片
    String name = "";
    String sex = "";
    String nation = "";
    String num = "";
    String address = "";
    String issueAuthority = "";
    String birthday = "";

 @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_realname;);
		ButterKnife.bind(this);
		  //正面扫描
        shiXiang.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(RealnameActivity.this, CameraActivity.class);
                intent.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
                        FileUtil.getSaveFile(getApplication()).getAbsolutePath());
                intent.putExtra(CameraActivity.KEY_NATIVE_ENABLE, true);
                intent.putExtra(CameraActivity.KEY_NATIVE_MANUAL, true);
                intent.putExtra(CameraActivity.KEY_CONTENT_TYPE, CameraActivity.CONTENT_TYPE_ID_CARD_FRONT);
                startActivityForResult(intent, REQUEST_CODE_CAMERA);
            }
        });

		 //反面扫描
        tt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(RealnameActivity.this, CameraActivity.class);
                intent.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
                        FileUtil.getSaveFile(getApplication()).getAbsolutePath());
                intent.putExtra(CameraActivity.KEY_NATIVE_ENABLE, true);
                intent.putExtra(CameraActivity.KEY_NATIVE_MANUAL, true);
                intent.putExtra(CameraActivity.KEY_CONTENT_TYPE, CameraActivity.CONTENT_TYPE_ID_CARD_BACK);
                startActivityForResult(intent, REQUEST_CODE_CAMERA);
            }
        });

	 //点击下一步就开始获取照片的内容进行加密上传
        xiayibu.setOnClickListener(new View.OnClickListener() {
            private String s7;
            private String s6;
            private String s5;
            private String s4;
            private String s3;
            private String s1;
            private String s2;
			//判断是否上传上照片
            @Override
            public void onClick(View v) {
                if (a & b == true) {
                    Toast.makeText(RealnameActivity.this, "请上传前后照片", Toast.LENGTH_SHORT).show();
                } else if (a == true) {
                    Toast.makeText(RealnameActivity.this, "请输入前照片", Toast.LENGTH_SHORT).show();
                } else if (b == true) {
                    Toast.makeText(RealnameActivity.this, "请输入后照片", Toast.LENGTH_SHORT).show();
                } else {
                    try {
                        s1 = RsaCoder.encryptByPublicKey(name);
                        s2 = RsaCoder.encryptByPublicKey(sex);
                        s3 = RsaCoder.encryptByPublicKey(nation);
                        s7 = RsaCoder.encryptByPublicKey(birthday);
                        s4 = RsaCoder.encryptByPublicKey(num);
                        s5 = RsaCoder.encryptByPublicKey(address);
                        s6 = RsaCoder.encryptByPublicKey(issueAuthority);

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    SharedPreferences user = MyApp.context.getSharedPreferences("user", MODE_PRIVATE);
                    String userId = user.getString("userId", "");
                    //mvp调用Presenter层
                    aPresenter.ShowShenPresenter(userId,s1,s2,s3,s7,s5,s4,s6);
                    Intent intent = new Intent(RealnameActivity.this, ShenFxActivity.class);
                    startActivity(intent);
                    finish();
                }
            }
        });

		 //点击←返回
        xinFan.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(RealnameActivity.this, ShenFxActivity.class);
                startActivity(intent);
                finish();
            }
        });

		// 初始化
        initAccessTokenWithAkSk();
   }
   
	在onCreate方法外写初始化,记得更换你自己的AK,SK;
	private void initAccessTokenWithAkSk() {
        OCR.getInstance(RealnameActivity.this).initAccessTokenWithAkSk(
                new OnResultListener<AccessToken>() {
                    @Override
                    public void onResult(AccessToken result) {
                        // 本地自动识别需要初始化
                        initLicense();
                        Log.d("MainActivity", "onResult: " + result.toString());
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(RealnameActivity.this, "初始化认证成功", Toast.LENGTH_SHORT).show();
                            }
                        });
                    }

                    @Override
                    public void onError(OCRError error) {
                        error.printStackTrace();
                        Log.e("MainActivity", "onError: " + error.getMessage());
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(RealnameActivity.this, "初始化认证失败,请检查 key", Toast.LENGTH_SHORT).show();
                            }
                        });
                    }
                }, getApplicationContext(),
                // 需要自己配置 https://console.bce.baidu.com
                "您自己的AK",
                // 需要自己配置 https://console.bce.baidu.com
                "您自己的SK");
    }

	 private void initLicense() {
      	  CameraNativeHelper.init(this, OCR.getInstance(RealnameActivity.this).getLicense(),
       	         new CameraNativeHelper.CameraNativeInitCallback() {
                    @Override
                    public void onError(int errorCode, Throwable e) {
                        final String msg;
                        switch (errorCode) {
                            case CameraView.NATIVE_SOLOAD_FAIL:
                                msg = "加载so失败,请确保apk中存在ui部分的so";
                                break;
                            case CameraView.NATIVE_AUTH_FAIL:
                                msg = "授权本地质量控制token获取失败";
                                break;
                            case CameraView.NATIVE_INIT_FAIL:
                                msg = "本地质量控制";
                                break;
                            default:
                                msg = String.valueOf(errorCode);
                        }
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(RealnameActivity.this,
                                        "本地质量控制初始化错误,错误原因: " + msg, Toast.LENGTH_SHORT).show();
                            }
                        });
                    }
                });
   			 }


	//获取返回的照片
	  @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == REQUEST_CODE_CAMERA && resultCode == Activity.RESULT_OK) {
            if (data != null) {
                String contentType = data.getStringExtra(CameraActivity.KEY_CONTENT_TYPE);
                //照片
                filePath = FileUtil.getSaveFile(getApplicationContext()).getAbsolutePath();
                if (!TextUtils.isEmpty(contentType)) {
                    if (CameraActivity.CONTENT_TYPE_ID_CARD_FRONT.equals(contentType)) {
                        recIDCard(IDCardParams.ID_CARD_SIDE_FRONT, filePath);
                        ee.setImageURI(Uri.parse(filePath));
                        shiXiang.setVisibility(View.GONE);
                        shiXiang2.setVisibility(View.GONE);
                        a = false;
                    } else if (CameraActivity.CONTENT_TYPE_ID_CARD_BACK.equals(contentType)) {
                        recIDCard(IDCardParams.ID_CARD_SIDE_BACK, filePath);
                        rr.setImageURI(Uri.parse(filePath));
                        tt.setVisibility(View.GONE);
                        tt2.setVisibility(View.GONE);
                        b = false;
                    }
                }
            }
        }

    }


	 private void recIDCard(final String idCardSide, String filePath) {
        IDCardParams param = new IDCardParams();
        param.setImageFile(new File(filePath));
        // 设置身份证正反面
        param.setIdCardSide(idCardSide);
        // 设置方向检测
        param.setDetectDirection(true);
        // 设置图像参数压缩质量0-100, 越大图像质量越好但是请求时间越长。 不设置则默认值为20
        param.setImageQuality(40);
        OCR.getInstance(RealnameActivity.this).recognizeIDCard(param, new OnResultListener<IDCardResult>() {
            @Override
            public void onResult(IDCardResult result) {
                if (result != null) {

                    if (result.getName() != null) {
                        name = result.getName().toString();		//名字
                    }
                    if (result.getGender() != null) {
                        sex = result.getGender().toString();	//性别
                    }
                    if (result.getEthnic() != null) {
                        nation = result.getEthnic().toString();	//名族
                    }
                    if (result.getIdNumber() != null) {
                        num = result.getIdNumber().toString();	//身份证号
                    }
                    if (result.getAddress() != null) {
                        address = result.getAddress().toString();	//住址
                    }
                    if (result.getBirthday() != null) {
                        birthday = result.getBirthday().toString();	//生日
                    }
                    if (result.getIssueAuthority() != null) {
                        issueAuthority = result.getIssueAuthority().toString();	//签发机关
                    }

                    if (idCardSide.equals("front")) {
                        Toast.makeText(RealnameActivity.this, "姓名: " + name + "\n" +
                                "性别: " + sex + "\n" +
                                "民族: " + nation + "\n" +
                                "身份证号码: " + num + "\n" +
                                "住址: " + address + "\n"
                                "生日: " + address + "\n", Toast.LENGTH_SHORT).show();
                    } else if (idCardSide.equals("back")) {
                        Toast.makeText(RealnameActivity.this, "签发机关: " + issueAuthority + "\n", Toast.LENGTH_SHORT).show();
                    }


                }
            }

            @Override
            public void onError(OCRError error) {
                Toast.makeText(RealnameActivity.this, "识别出错,请查看log错误代码", Toast.LENGTH_SHORT).show();
                Log.d("MainActivity", "onError: " + error.getMessage());
            }
        });
    }

    @Override
    protected void onDestroy() {
        CameraNativeHelper.release();
        // 释放内存资源
        OCR.getInstance(RealnameActivity.this).release();
        super.onDestroy();

    }

嘿嘿,到这里实现获取身份证的信息以及绑定就成功了!!!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白色单肩包

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值